使用UDF时任务序列化错误

时间:2018-05-02 07:53:53

标签: scala apache-spark spark-dataframe

我使用IntelliJ IDEA来执行下面显示的代码。 df的内容如下:

+------+------+
|nodeId|   p_i|
+------+------+
|    26|0.6914|
|    29|0.6914|
|   474|   0.0|
|    65|0.4898|
|   191|0.4445|
|   418|0.4445|

运行此代码时,我在行result.show()处收到任务序列化错误:

class MyUtils extends Serializable {
  def calculate(spark: SparkSession,
              df: DataFrame): DataFrame = {

    def myFunc(a: Double): String = {
      var result: String = "-"
      if (a > 1) {
        result = "A"
      } 
      return result
    }

    val myFuncUdf = udf(myFunc _)

    val result = df.withColumn("role", myFuncUdf(df("a")))

    result.show()

    result
  }
}

为什么我会收到此错误?

更新

这就是我运行代码的方式:

object Processor extends App {
    // ...
    val mu = new MyUtils()
    var result = mu.calculate(spark, df)
}

1 个答案:

答案 0 :(得分:0)

我必须将extends Serializable添加到类MyUtils的规范中。