Ho invece problemi molto simili con un'origine dati Teradata e si è trattato del fatto che l'annullamento dei valori della colonna su DataFrame non corrispondeva ai dati sottostanti (la colonna aveva nullable=false, ma alcune righe avevano valori nulli in quel particolare campo). La causa nel mio caso era che il driver JDBC Teradata non restituiva i metadati della colonna corretti. Devo ancora trovare una soluzione alternativa a questo.
Per vedere il codice che viene generato (all'interno del quale viene generato l'NPE):
- import org.apache.spark.sql.execution.debug._
- chiama .debugCodegen() su DataSet/DataFrame
Spero che questo aiuti.