2017-02-14 1 views
9

J'essaye d'obtenir l'heure unix d'un champ d'horodatage en millisecondes (13 chiffres) mais actuellement il retourne en secondes (10 chiffres).Unix_timestamp() peut-il renvoyer un temps unix en millisecondes dans Apache Spark?

scala> var df = Seq("2017-01-18 11:00:00.000", "2017-01-18 11:00:00.123", "2017-01-18 11:00:00.882", "2017-01-18 11:00:02.432").toDF() 
df: org.apache.spark.sql.DataFrame = [value: string] 

scala> df = df.selectExpr("value timeString", "cast(value as timestamp) time") 
df: org.apache.spark.sql.DataFrame = [timeString: string, time: timestamp] 


scala> df = df.withColumn("unix_time", unix_timestamp(df("time"))) 
df: org.apache.spark.sql.DataFrame = [timeString: string, time: timestamp ... 1 more field] 

scala> df.take(4) 
res63: Array[org.apache.spark.sql.Row] = Array(
[2017-01-18 11:00:00.000,2017-01-18 11:00:00.0,1484758800], 
[2017-01-18 11:00:00.123,2017-01-18 11:00:00.123,1484758800], 
[2017-01-18 11:00:00.882,2017-01-18 11:00:00.882,1484758800], 
[2017-01-18 11:00:02.432,2017-01-18 11:00:02.432,1484758802]) 

Même si 2017-01-18 11:00:00.123 et 2017-01-18 11:00:00.000 sont différents, je reçois en même temps unix retour 1484758800

Qu'est-ce que je manque?

Répondre

1

unix_timestamp() Renvoyer un horodatage unix en secondes. Les 3 derniers chiffres des horodatages sont les mêmes que les 3 derniers chiffres de la chaîne millisecondes (1.999sec = 1999 milliseconds). Il suffit donc de prendre les 3 derniers chiffres de la chaîne d'horodatage et de les ajouter à la fin de la chaîne millisecondes.