Spark UDF - 任务不可序列化的异常

时间:2017-10-22 12:48:31

标签: scala spark-dataframe

我正在尝试使用以下scala代码创建UDF

     if (empty($error_message) && !isset($_POST["subject1"], 
                                         $_POST["subject2"])){

                    $error_message = 'Invalid form input! Please select at 
                     least one option';

                  }

当我运行此代码时,我得到的任务不是可序列化的异常。

任何想法?感谢。

1 个答案:

答案 0 :(得分:1)

udf被视为一个黑盒子,它要求传递的列被序列化和反序列化,因此当您有内置函数的替代方法时,不建议使用udf

使用udf调用withColumn函数很好,但您已在validateId函数内调用了另一个函数udf,导致了该问题。

我建议您不要使用udf函数,因为只需使用when内置函数就可以达到要求。

import org.apache.spark.sql.functions._
val formattedDF2 = df.withColumn("result_col", when($"id" === 1, lit("ID IS EQUAL TO 1")).otherwise(when($"id" > 2, lit("ID IS GREATER THAN 2")).otherwise(when($"id" > 1, lit("VALID RECORDS")).otherwise(lit("NO VALID RECORDS")))))