【问题标题】:Getting Null Pointer exception in spark UDF在火花 UDF 中获取空指针异常
【发布时间】:2020-02-28 17:27:51
【问题描述】:

我的代码如下。我正在使用 spark UDF 将名为“IssueDate”的新列添加到现有数据框中,但出现空指针异常。所以任何关于这个的建议/建议都可以摆脱这个问题。

    class IssueDateDateHandler(var masterDF) extends Serializable {
      val getIssueDate:(String)=> Option[String] = {(Id) =>
        Option(Id) match {
          case Some(Id) => {
            val matchingIdDF = masterDF.where(col("Id") === Id)
            val issueDt = matchingIdDF.select("IssueDate").head().mkString
            Option(issueDt)
          }
          case _ => Some("")
        }
      }

      val issueDate = udf[Option[String], String](getIssueDate)

      def addIssueDate(transformedDFs: MutableList[DataFrame]): MutableList[DataFrame] = {
          for (tmpDF <- transformedDFs) {
               val df = tmpDF.withColumn("IssueDate", issueDate(col("Id")))
          }
      }
    }

【问题讨论】:

  • 异常是: 由:java.lang.NullPointerException at org.apache.spark.sql.Dataset.(Dataset.scala:182) at org.apache.spark.sql.Dataset $.apply(Dataset.scala:64) at org.apache.spark.sql.Dataset.withTypedPlan(Dataset.scala:3411) at org.apache.spark.sql.Dataset.filter(Dataset.scala:1484) at org .apache.spark.sql.Dataset.where(Dataset.scala:1512) 在 com.jetblue.revenueingest.transformations.IssueDateHandler$$anonfun$2.apply(IssueDateHandler.scala:28) 在 com.jetblue.revenueingest.transformations.IssueDateHandler $$anonfun$2.apply(IssueDateHandler.scala:25) ... 21 更多
  • 请编辑问题而不是添加评论。
  • 请添加错误日志

标签: scala apache-spark apache-spark-sql user-defined-functions


【解决方案1】:

TL;DR 检查是否存在来自类定义的 masterDF 为空的情况

在您的用户定义函数中,您有两个输入:

  • Id,这是你自定义函数的参数
  • masterDF,来自定义用户自定义函数的类

如果这两个输入之一为空会发生什么?

ID 为空

如果Id为空,那么用户定义函数第一行的Option(Id)就是None,所以同一行的模式匹配到case _:,返回Some("")

因此,空的Id 不会导致NullPointerException

masterDF 为空

如果Id 不为空,则模式匹配转到case Some(Id):,后者执行以下行:

val matchingIdDF = masterDF.where(col("Id") === Id)

由于masterDF 为空,我们尝试在空DataFrame 上调用where 方法,结果为NullPointerException

结论

只有当masterDF 为空时,这个用户定义的函数才会抛出NullPointerException

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多