web-dev-qa-db-ja.com

Spark文字列をタイムスタンプに変換するSQL

Spark SQLを初めて使用し、文字列をsparkデータフレームのタイムスタンプに変換しようとしています。'2017-08-01T02:26:59.000Z'のような文字列がtime_stringという列

この文字列をタイムスタンプに変換する私のコードは

CAST (time_string AS Timestamp)

しかし、これは2017-07-31 19:26:59のタイムスタンプを提供します

なぜそれが時間を変えるのですか?時間を変更せずにこれを行う方法はありますか?

助けてくれてありがとう!

14
Jessica

nix_timestamp 関数を使用して、utc形式の日付をタイムスタンプに変換できます。

val df2 = Seq(("a3fac", "2017-08-01T02:26:59.000Z")).toDF("id", "eventTime")

df2.withColumn("eventTime1", unix_timestamp($"eventTime", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").cast(TimestampType))

出力:

+-------------+---------------------+
|userid       |eventTime            |
+-------------+---------------------+
|a3fac        |2017-08-01 02:26:59.0|
+-------------+---------------------+

お役に立てれば!

18
Shankar Koirala

Javaのソリューション

いくつかのSpark SQL関数があり、日付形式を試すことができます。

変換例:201812240915-> 2018-12-24 09:15:

解決策(Spark SQLステートメント):

SELECT
 ...
 to_timestamp(cast(DECIMAL_DATE as string),'yyyyMMddHHmmss') as `TIME STAMP DATE`,
 ...
FROM some_table

org.Apache.spark.sql.SparkSessionのインスタンスを使用して、SQLステートメントを使用できます。たとえば、SQLステートメントを実行する場合、Sparkは次のソリューションを提供します。

...
// You have to create an instance of SparkSession
sparkSession.sql(sqlStatement); 
...

注:

  • 10進数を文字列に変換する必要があり、解析をタイムスタンプ形式に変換できるようになった後
  • あなたが望むフォーマットを取得する形式で遊ぶことができます...
0
Rzv Razvan