私の関数でudfを使い、私のmain関数でこの関数を呼び出そうとしました。私はコンパイルでエラーが発生しません。しかし、私はこのアプリケーションを実行しようとしたときにエラーを出しました。メインクラス名のudfという行番号のクラスを初期化できませんでした。以下はコード構造です:sparkで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をどこに置くべきかの規則はありますか?
udfは呼び出す前に定義する必要があります。 udf関数 –
を呼び出すために使用しているコードでポストを更新すると、dateconverter udf関数コードの呼び出し方法がまだ更新されていない場合に役立ちます。完全なエラーメッセージで更新してください。 –