[英]Scala/Spark idiomatic way to handle nulls in the DataSet?
以下代碼從數據庫表讀取數據並返回DataSet[Cols]
。
case class Cols (F1: String, F2: BigDecimal, F3: Int, F4: Date, ...)
def readTable() : DataSet[Cols] = {
import sqlContext.sparkSession.implicits._
sqlContext.read.format("jdbc").options(Map(
"driver" -> "com.microsoft.sqlserver.jdbc.SQLServerDriver",
"url" -> jdbcSqlConn,
"dbtable" -> s"..."
)).load()
.select("F1", "F2", "F3", "F4")
.as[Cols]
}
該值可以為空。 后來,當使用這些字段時,它引發了運行時異常。
val r = readTable.filter(x => (if (x.F3 > ...
Scala慣用的處理數據集中null的方式是什么?
運行代碼時出現錯誤。
java.lang.NullPointerException at scala.math.BigDecimal.$minus(BigDecimal.scala:563) at MappingPoint$$anonfun$compare$1.apply(Mapping.scala:51)
選項是慣用的方式
case class Cols (F1: Option[String], F2: Option[BigDecimal], F3: Option[Int], F4: Option[Date], ...)
如databricks樣式指南中所述,對性能造成了影響
Option(null)
將返回None
。
因此,例如:
val r = readTable.filter(x => (if (Option(x.F3).getOrElse(0) >
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.