2017-02-14 41 views
9

Я пытаюсь получить время unix из поля timestamp в миллисекундах (13 цифр), но в настоящее время он возвращается в секундах (10 цифр).Может unix_timestamp() вернуть unix время в миллисекундах в 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]) 

Даже если 2017-01-18 11:00:00.123 и 2017-01-18 11:00:00.000 разные, я получаю то же самое время UniX назад 1484758800

Что я упускаю?

ответ

1

unix_timestamp() return unix временная метка в секундах.

Последние 3 цифры временных меток совпадают с последними 3 цифрами строки миллисекунд (1.999sec = 1999 milliseconds), поэтому просто возьмите последние 3 цифры строки временных меток и добавьте в конец строки миллисекунд.