Sparkでunixのタイムスタンプを日付に変換する方法
Unixタイムスタンプ(例:1435655706000)のカラムを持つデータフレームがあり、 'yyyy-MM-DD' のフォーマットでデータに変換したいのですが、 nscala-timeを試しましたがうまくいきません。
val time_col = sqlc.sql("select ts from mr").map(_(0).toString.toDateTime)
time_col.collect().foreach(println)
で、エラーが出ました。 java.lang.IllegalArgumentException:Invalid format: "1435655706000"は"6000"で不正なフォーマットです。
31
7
spark1.5以降、それを行うための組み込みUDFがあります。
詳細については、Spark 1.5.2 API Docを確認してください。
ここでは、Scala DataFrame関数を使用しています:from_unixtimeおよびto_date。
。
以下のライブラリのインポートが必要です。
または、あなたのケースに合わせて:
他の方法があるかもしれません.
これが役に立つといいのですが :)
nscala_time で toDataTime を適用する前に String に変換する必要はない。
import com.github.nscala_time.time.Imports._
とする.`
私は、joda-time ライブラリを使用して、
DataFrame
にマッピングし、DateTime
をStringに変換することによって、この問題を解決しました。あなたができることは:
ここで、時間は新しい列名であり、COL_WITH_UNIX_TIMEは変換する列の名前です。 これにより、ミリ単位でデータが表示され、データがより正確になります。たとえば、「yyyy-MM-dd'T'HH:mm:ss.SSS'Z」」などです。
Javaでは次の構文を使用できます。