Spark SQL преобразует строку в метку времени
Я новичок в Spark SQL и пытаюсь преобразовать строку в метку времени в кадре с искровыми данными. У меня есть строка, которая выглядит как '2017-08-01T02:26:59.000Z'
в столбце time_string
Мой код для преобразования этой строки в метку времени
CAST (time_string AS Timestamp)
Но это дает мне временную метку 2017-07-31 19:26:59
Почему он меняет время? Есть ли способ сделать это, не изменяя время?
Спасибо за любую помощь!
Ответы
Ответ 1
Вы можете использовать unix_timestamp для преобразования даты форматирования utc в метку времени
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))
Вывод:
+-------------+---------------------+
|userid |eventTime |
+-------------+---------------------+
|a3fac |2017-08-01 02:26:59.0|
+-------------+---------------------+
Надеюсь, это поможет!
Ответ 2
Решение на Java
Есть несколько функций Spark SQL, которые позволяют вам играть с форматом даты.
Пример конверсии: 20181224091530 → 2018-12-24 09:15:30
Решение (оператор Spark SQL):
SELECT
...
to_timestamp(cast(DECIMAL_DATE as string),'yyyyMMddHHmmss') as 'TIME STAMP DATE',
...
FROM some_table
Вы можете использовать операторы SQL, используя экземпляр org.apache.spark.sql.SparkSession. Например, если вы хотите выполнить инструкцию sql, Spark предоставит следующее решение:
...
// You have to create an instance of SparkSession
sparkSession.sql(sqlStatement);
...
Примечание:
- Вам нужно преобразовать десятичную строку в строку, и после этого вы сможете выполнить синтаксический анализ в формате отметки времени
- .Вы можете играть с форматом получить, какой формат вы хотите...