Spark将TimestampType转换为格式为yyyyMMddHHmm的字符串

时间:2019-03-17 21:23:00

标签: scala apache-spark timestamp datetime-format datetime-conversion

在我的数据框中,我有一列TimestampType格式为'2019-03-16T16:54:42.968Z',我想将其转换为格式为'201903161654'的StringType列,而不是通用的timestamp列。这是因为我需要根据字符串格式的时间戳对多个目录进行分区,如果我在时间戳列上进行分区,则在创建目录时会创建特殊字符。

在spark中可以使用任何API将Timestamp列转换为具有上述格式的字符串类型吗?

2 个答案:

答案 0 :(得分:1)

使用date_format函数:date_format(date/timestamp/string ts, string fmt)

将日期/时间戳记/字符串转换为日期格式fmt指定的格式的字符串值。支持的格式为Java SimpleDateFormat formats。第二个参数fmt应该是常量。例如:date_format('2015-04-08', 'y')"2015"

答案 1 :(得分:1)

使用unix_timestamp和date_format函数

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:001.003.03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:schemaLocation="urn:tech:xsd:pain.001.001.03">
  <staff id="1">
    <firstname>yong</firstname>
  </staff>
</Document>

或仅使用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.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>