簡體   English   中英

Scala / Spark的慣用方式來處理數據集中的空值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM