我尝试在我的函数中使用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放进去吗?
答案 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.
...
}