2017-10-09 196 views
0

我使用星火2.1.0在UNIX中,發現在那裏UNIX_TIMESTAMP正在發生變化小時,一個特定的時間戳一個奇怪的問題變化小時,我創建了一個數據幀如下UNIX_TIMESTAMP()函數中階火花

對於df2中的第一條記錄,將「20170312020200」作爲字符串,後來我在df3中投入時間戳,小時數應爲02,而在df3中爲03。但第二條記錄在將字符串轉換爲時間戳時沒有問題。

當我在本地系統中使用Intellij運行應用程序時,不會發生這種情況。當我們運行我們的應用程序時,這也發生在spark-submit中。

回答

4

2017年3月12日2:02 AM在很多時區都不是有效的時間。那是當夏令時開始,時鐘在美國從1:59:59跳到3:00:00。

我的猜測是你的本地機器和火花簇具有不同的系統時區設置。

+0

這很有道理,我的本地系統在格林威治標準時間+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]