2017-02-14 17 views
9

Próbuję uzyskać czas unix z pola znacznika czasu w milisekundach (13 cyfr), ale obecnie zwraca w ciągu kilku sekund (10 cyfr).Czy unix_timestamp() może zwrócić czas unixowy w milisekundach w 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]) 

Nawet 2017-01-18 11:00:00.123 i 2017-01-18 11:00:00.000 są różne, uzyskać ten sam czas uniksowy tylną 1484758800

Czego mi brakuje?

Odpowiedz

1

unix_timestamp() powrót znacznika unix w sekundach.

Ostatnie 3 cyfry w sygnaturach czasowych są takie same z trzema ostatnimi cyframi ciągu milisekund (1.999sec = 1999 milliseconds), więc weź 3 ostatnie cyfry ciągu sygnatur czasowych i dopisz na końcu ciągu milisekund.

Powiązane problemy