2017-10-09 6 views
0

J'utilise Spark 2.1.0 en unix et a trouvé un problème bizarre où unix_timestamp est en train de changer l'heure pour un horodatage particulier, je créé un dataframe comme ci-dessousfonction unix_timestamp() change heure étincelle scala

Pour le 1er enregistrement de df2, avoir "20170312020200" comme chaîne, que j'ai ensuite converti en horodatage dans df3, les heures devraient être 02 mais à la place, elles seront 03 dans df3. Mais le 2ème enregistrement n'a pas de problème dans la conversion de chaîne en horodatage.

Cela ne se produit pas lorsque j'exécute l'application à l'aide d'Intellij dans le système local. Cela se passe dans spark-submit aussi bien quand nous courons notre application.

Répondre

4

12 mars 2017 2:02 AM n'est pas une heure valide dans beaucoup de fuseaux horaires. C'est à ce moment-là que l'heure d'été a commencé et que l'horloge a sauté de 1:59:59 à 3:00:00 aux Etats-Unis.

Je suppose que votre machine locale et le cluster spark ont ​​des paramètres de fuseau horaire différents.

+0

Cela a du sens, mon système local est sur GMT +5,30 et le serveur est sur EDT. – Himanshu

-1

J'utilise Spark 2, vous pouvez voir les résultats suivants, votre problème n'est pas lié à unix_timestamp ou Spark version, s'il vous plaît vérifier vos données.

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]