2017-10-09 10 views
0

を時間を変更し、UNIX_TIMESTAMP 1つの特定のタイムスタンプのための時間を変更している奇妙な問題を発見し、私はUNIX_TIMESTAMP()関数は、私はUNIXでスパーク2.1.0を使用していScalaのスパークで

以下のようにデータフレームを作成しました

df2の1番目のレコードの文字列が "20170312020200"の場合、後でdf3のタイムスタンプにキャストしますが、時間は02になりますが、df3では03となります。しかし、2番目のレコードは、文字列をタイムスタンプに変換する際に問題がありません。

ローカルシステムでIntellijを使用してアプリケーションを実行すると、これは発生しません。これは、私たちのアプリを実行するときにもspark-submitで起こっています。

答えて

4

2017年3月12日2:02 AMは、多くのタイムゾーンで有効な時間ではありません。それは、夏時間が始まり、時計が米国の1時59分59秒から3時0分にスキップされたときでした。

私の推測はあなたのローカルマシンであり、スパーククラスターは異なるシステムタイムゾーン設定を持っています。

+0

私のローカルシステムはGMT +5.30で、サーバーはEDT上にあります。 – Himanshu

-1

私はSpark 2を使用していますが、unix_timestampまたはSparkのバージョンに関係しない次の結果が表示されます。データを確認してください。

import org.apache.spark.sql.functions.unix_timestamp 

val df2 = sc.parallelize(Seq(
     (10, "date", "20170312020200"), (10, "date", "20170312050200")) 
    ).toDF("id ", "somthing ", "datee") 

df2.show() 

val df3=df2.withColumn("datee", unix_timestamp($"datee", "yyyyMMddHHmmss").cast("timestamp")) 


df3.show() 



+---+---------+--------------+ 
|id |somthing |   datee| 
+---+---------+--------------+ 
| 10|  date|20170312020200| 
| 10|  date|20170312050200| 
+---+---------+--------------+ 

+---+---------+-------------------+ 
|id |somthing |    datee| 
+---+---------+-------------------+ 
| 10|  date|2017-03-12 02:02:00| 
| 10|  date|2017-03-12 05:02:00| 
+---+---------+-------------------+ 

import org.apache.spark.sql.functions.unix_timestamp 
df2: org.apache.spark.sql.DataFrame = [id : int, somthing : string ... 1 more field] 
df3: org.apache.spark.sql.DataFrame = [id : int, somthing : string ... 1 more field] 
関連する問題