Spark конвертирует TimestampType в строку формата yyyyMMddHHmm - PullRequest
1 голос
/ 18 марта 2019

В моем фрейме данных у меня есть столбец формата TimestampType '2019-03-16T16: 54: 42.968Z'. Я бы хотел преобразовать его в столбец StringType с форматом '201903161654' вместо общего столбца временных меток. Это потому, что мне нужно разделить несколько каталогов на основе временной метки, отформатированной в строку, если я разделю столбец временной метки, то при создании каталога создаются специальные символы.

Есть ли API, который я могу использовать в spark для преобразования столбца Timestamp в строковый тип с форматом выше?

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Использование функций unix_timestamp и date_format

scala> val dt = Seq("2019-03-16T16:54:42.968Z").toDF("ts_str")
dt: org.apache.spark.sql.DataFrame = [ts_str: string]

scala> dt.select(unix_timestamp('ts_str,"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")).show
+----------------------------------------------------+
|unix_timestamp(ts_str, yyyy-MM-dd'T'HH:mm:ss.SSS'Z')|
+----------------------------------------------------+
|                                          1552735482|
+----------------------------------------------------+


scala> dt.select(date_format(unix_timestamp('ts_str,"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").cast("timestamp"), "yyyyMMddHHmm").as("res") ).show
+------------+
|         res|
+------------+
|201903161654|
+------------+


scala>

или просто с помощью функций to_timestamp и date_format

scala> val dt = Seq("2019-03-16T16:54:42.968Z").toDF("ts_str")
dt: org.apache.spark.sql.DataFrame = [ts_str: string]

scala> dt.withColumn("ts_str",to_timestamp('ts_str,"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")).show(false)
+-------------------+
|ts_str             |
+-------------------+
|2019-03-16 16:54:42|
+-------------------+


scala> dt.withColumn("ts_str",date_format(to_timestamp('ts_str,"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"), "yyyyMMddHHmm" )).show(false)
+------------+
|ts_str      |
+------------+
|201903161654|
+------------+


scala>
1 голос
/ 18 марта 2019

Используйте функцию date_format: date_format(date/timestamp/string ts, string fmt).

Преобразует дату / отметку времени / строку в значение строки в формате, указанном в формате даты fmt. Поддерживаемые форматы Java SimpleDateFormat форматы . Второй аргумент fmt должен быть постоянным. Пример: date_format('2015-04-08', 'y') - это "2015".

...