2017-02-14 41 views
9

私はミリ秒(13桁)のタイムスタンプフィールドからunix時間を取得しようとしていますが、現在は秒単位で返します(10桁)。 2017-01-18 11:00:00.1232017-01-18 11:00:00.000が異なっていてもunix_timestamp()はApache Sparkのunix時間をミリ秒単位で返しますか?

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]) 

、私は戻って1484758800

を同じUNIX時間を取得し、私は何をしないのですか?

答えて

1

unix_timestamp()リターンunixタイムスタンプ(秒単位)。

タイムスタンプの最後の3桁は、ミリ秒文字列(1.999sec = 1999 milliseconds)の最後の3桁と同じです。したがって、タイムスタンプ文字列の最後の3桁を取り、ミリ秒文字列の末尾に追加してください。

関連する問題