0

日付:移入Elasticsearchは、私のようなスキームでスパークでのデータフレームを持っているApacheのスパーク

id: string 
style: string 
creationdate: string 

私の日付が "YYYY-MM-DD HH:MM:SS.SSS" などの日時文字列です。私が使用して、日付を文字列から「のCreationDate」を変換しています:

val df2 = df.withColumn("creationdate2", $"creationdate".cast(DateType)) 
      .drop($"creationdate") 
      .withColumnRenamed("creationdate2", "creationdate") 

にこれは、結果:

 "creationdate": { 
     "type": "date", 
     "format": "yyyy-MM-dd" 
     } 
:私のように定義された日付マッピングとElasticsearchインデックスを投入しようとしています

id: string 
style: string 
creationdate: date 

String to DateTime変換は、印刷時にこの形式と一致するように見えます。私は、インデックスを移入するために行くときしかし、:

df2.saveToEs("myindex") 

私はエラーを取得する:

org.apache.spark.util.TaskCompletionListenerException: Found unrecoverable error [169.10.29.240:9200] returned Bad Request(400) - failed to parse [creationdate]; Bailing out.. 
     at org.apache.spark.TaskContextImpl.markTaskCompleted(TaskContextImpl.scala:105) 
     at org.apache.spark.scheduler.Task.run(Task.scala:112) 
     at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:282) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 

According to the guide日はそれがDATETYPEに変換されているので、構文解析することができるはずです。何か案は?スキーマはdateの代わりにDateTypeを表示する必要がありますか?変換を間違っているのですか?

+0

df2.show()を実行するとどうなりますか?そして、あなたは日付にキャストせずにToTo()を保存できますか? –

+0

@PaulBackすべてがshow()でうまく見えますが、日付は期待通りにyyyy-MM-ddにトリムされます。 saveToEs()はキャストなしで同じエラーをスローします –

+0

そして文字列型を期待するためにES側のインデックスを改訂しましたか? –

答えて

0

もう一度ステップを実行し、java.sql.Dateを文字列に変換し直して解決しました。 UDFの使用:

val dateToString = udf((date: java.sql.Date) => date.toString) 
関連する問題