以下是读取 Row 中值的 Scala 代码(Spark 1.6),当该值为空时,会出现 NullPointerException。
什么导致了NullPointerException并建议如何处理这种情况?
PS:从DataFrame中获取行的方式如下:
val test = row.getAs[Int]("ColumnName").toString
虽然这样可以正常工作
val test1 = row.getAs[Int]("ColumnName") // returns 0 for null
val test2 = test1.toString // converts to String fine
什么导致了NullPointerException并建议如何处理这种情况?
PS:从DataFrame中获取行的方式如下:
val myRDD = myDF.repartition(partitions)
.mapPartitions{ rows =>
rows.flatMap{ row =>
functionWithRows(row) //has above logic to read null column which fails
}
}
functionWithRows
遇到了上述的NullPointerException
错误。
我的数据框架(MyDF):
root
|-- LDID: string (nullable = true)
|-- KTAG: string (nullable = true)
|-- ColumnName: integer (nullable = true)
spark.sql(" select 1 as col union all select null as col").map(_.getAs[Int]("col").toString ).collect
。去掉toString
就可以正常运行了。 - philantrovert