2017-07-15 6 views
0

私の関数で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をどこに置くべきかの規則はありますか?

+0

udfは呼び出す前に定義する必要があります。 udf関数 –

+0

を呼び出すために使用しているコードでポストを更新すると、dateconverter udf関数コードの呼び出し方法がまだ更新されていない場合に役立ちます。完全なエラーメッセージで更新してください。 –

答えて

0

withColumnudf関数を呼び出すには、apiを使用する必要があります。私はあなたがその部分を逃したと思います。あなたができることはここにあります。

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. 
    ... 
} 
+0

実際には、私は 'withColumn'でudfを使います。そして私はラップトップでエラーを再現しようとしていますが、その後エラーメッセージが更新されます。 –

+0

あなたはこのエラーを再現できましたか? –

+0

現在はありません。私はサーバー側のような同じ環境を達成しようとします。私はこれを全地域の環境で再現することはできません。 –

関連する問題