6

Tôi mới sử dụng Spark SQL và đang cố chuyển đổi chuỗi thành dấu thời gian trong khung dữ liệu tia lửa. Tôi có một chuỗi trông giống như '2017-08-01T02:26:59.000Z' trong một cột gọi là TIME_STRINGChuỗi chuyển đổi Spark SQL thành dấu thời gian

Mã của tôi để chuyển đổi chuỗi này để timestamp là

CAST (time_string AS Timestamp) 

Nhưng điều này mang lại cho tôi một dấu thời gian của 2017-07-31 19:26:59

Tại sao nó thay đổi thời gian? Có cách nào để làm điều này mà không thay đổi thời gian?

Cảm ơn bạn đã trợ giúp!

+0

thử 'unix_timestamp' để truyền nó vào Dấu thời gian :) –

+0

Xem thêm https://stackoverflow.com/questions/35761586/spark-sql-not-converting-timezone-correctly. – asmaier

Trả lời

9

Bạn có thể sử dụng unix_timestamp chức năng để chuyển đổi các định dạng ngày utc để đánh dấu thời gian

val df2 = Seq(("a3fac", "2017-08-01T02:26:59.000Z")).toDF("id", "eventTime") 

df2.withColumn("eventTime1", unix_timestamp($"eventTime", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").cast(TimestampType)) 

Output:

+-------------+---------------------+ 
|userid  |eventTime   | 
+-------------+---------------------+ 
|a3fac  |2017-08-01 02:26:59.0| 
+-------------+---------------------+ 

Hope this helps!

+0

Giả sử chúng ta có 9 chữ số qua thập phân, chúng ta có thực sự cần phải chỉ định 'ss.SSSSSSSSS'Z''? – MichaelChirico

+0

@Shankar Koirala Bạn có thể vui lòng xem tại https: // stackoverflow.com/questions/48195836/conversion-day-lights-saving-time-string-to-timestamp-cung cấp-sai-results' – User12345

Các vấn đề liên quan