【问题标题】:Task not serializable in Scala on Databricks任务在 Databricks 上的 Scala 中不可序列化
【发布时间】:2020-08-30 13:37:02
【问题描述】:

我正在尝试使用 Scala 在 Databricks 中实现 UDF 功能。即使在将函数封装在一个类中并继承了 Serializable 类之后,也会出现 Task not serializable 错误。请参考以下代码:

var rkList = List[String]("")

class appendData extends Serializable{
  var cKey = ""

  def addKey(data:String):String={
    if(data=="")
    {
      return cKey
    }
    else
    {
      cKey=data
      return cKey
    }
  }

  def execute(dframe: DataFrame): DataFrame ={
    val keyAddUDF = udf[String, String](addKey)

    var df = dframe.withColumn("r_c",substring(col("val"),0,6))
    df = df.withColumn("r_k",when(col("r_c")===kHolder, substring(col("val"),pos,len)).otherwise(""))
    rkList = df.select(col("r_k")).distinct.collect.map(_(0).toString).toList.filter(_ != "")

    return df.withColumn("val",concat(col("val"),keyAddUDF(col("r_k")))).drop("r_k","r_c")
  }
}


df = (new appendData).execute(df)

【问题讨论】:

    标签: scala apache-spark databricks azure-databricks serializable


    【解决方案1】:

    您不应该将execute 方法和udf 方法放在同一个类中。单独定义addKey函数,如:

    
    def addKey(data:String): String = {
        var rkList = List[String]("")
        var cKey = ""
    
        if(data=="") {
          return cKey
        } else {
          cKey=data
          return cKey
        }
    }
    
    val keyAddUDF = udf[String, String](addKey)
    
    
    def transformDf(dframe: DataFrame): DataFrame ={
        var df = dframe.withColumn("r_c",substring(col("val"),0,6))
        df = df.withColumn("r_k",when(col("r_c")===kHolder, substring(col("val"),pos,len)).otherwise(""))
        rkList = df.select(col("r_k")).distinct.collect.map(_(0).toString).toList.filter(_ != "")
        return df.withColumn("val",concat(col("val"),keyAddUDF(col("r_k")))).drop("r_k","r_c")
    }  
    
    
    df = transformDf(df)
    
    
    

    【讨论】:

      猜你喜欢
      • 2015-09-21
      • 2018-09-19
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2020-08-14
      相关资源
      最近更新 更多