6

Jestem nowy w Spark SQL i próbuję przekonwertować ciąg znaków na znacznik czasu w ramce danych iskry. Mam ciąg znaków, który wygląda jak '2017-08-01T02:26:59.000Z' w kolumnie o nazwie time_stringKonwertuj ciąg znaków SQL na znacznik czasu

mój kod do konwersji ten ciąg do datownika jest

CAST (time_string AS Timestamp) 

Ale to daje mi znacznik czasowy 2017-07-31 19:26:59

Dlaczego Zmiana czas? Czy istnieje sposób, aby to zrobić bez zmiany czasu?

Dzięki za pomoc!

+0

spróbuj 'unix_timestamp', aby przesłać go do TimestampType :) –

+0

Zobacz również https://stackoverflow.com/questions/35761586/spark-sql-not-converting-timezone-orrectly. – asmaier

Odpowiedz

9

Można użyć unix_timestamp funkcję do konwersji UTC sformatowany datę timestamp

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

wyjściowa:

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

nadzieję, że to pomaga!

+0

Załóżmy, że mamy 9 cyfr za liczbą dziesiętną, czy naprawdę musimy podać 'ss.SSSSSSSSS'Z''? – MichaelChirico

+0

@ Shankar Koirala Czy mógłbyś rzucić okiem na 'https: // stackoverflow.com/questions/48195836/conversion-day-lights-savings-time-string-to-timestamp-gives-wrong-results' – User12345