无法初始化由spark中的udf引起的类

时间:2017-07-15 15:40:55

标签: scala apache-spark

我尝试在我的函数中使用udf并在我的main函数中调用此函数。我在编译时没有错误。但是当我试图运行这个应用程序时,它给出了错误:不能使用行号为udf的主类名初始化类。下面是代码结构:

object shuffle {
create logger, conf, sparksession...
def main(): Unit = {
    get configuration from file
    val df = read in data
    try {
       val finaldf = my_function(df)
       finaldf.write_back_as_parquet
    } catch {
       deal with exception
    }
    end
 }
def my_function(arg : DataFrame): DataFrame = {
    val DateFormat = new SimpleDateFormat("yyyy-MM-dd")
    val dateConverter = udf((ts : String) => DateFormat.format(new Date(ts.toLong * 1000))) <----------error message point at this line
    arg.withColumn("ts", dateConverter($"value"))
        .withColumn("hh", lit(23)).withColumn("mm", lit(59))
 }

}

我感到困惑。为什么我会收到此错误?我有什么规定可以把我的udf放进去吗?

1 个答案:

答案 0 :(得分:0)

应使用

withColumn api来调用udf函数。我猜你错过了这一部分。所以,你可以做什么

def my_function(arg : DataFrame): DataFrame = {
    val dateConverter = udf((ts : String) => DateFormat.format(new Date(ts.toLong * 1000))) 
     arg.withColumn("dateConvertedColumn", dateConverter(col("ts")))  //<---- ts is the column name of the string date you want to convert. 
    ...
 }