Eu tenho problemas muito semelhantes com uma fonte de dados Teradata, e a nulidade da coluna no DataFrame não correspondia aos dados subjacentes (a coluna tinha nullable=false, mas algumas linhas tinham valores nulos nesse campo específico). A causa no meu caso foi o Teradata JDBC Driver não retornar os metadados de coluna corretos. Ainda estou para encontrar uma solução alternativa para isso.
Para ver o código que está sendo gerado (dentro do qual o NPE está sendo lançado):
- importar org.apache.spark.sql.execution.debug._
- chame .debugCodegen() no DataSet/DataFrame
Espero que isto ajude.