使用 Spark 数据帧 API 设置时间戳值的格式



我有一个数据帧,其中有一个date列,表示String格式的Unix时间戳。列值需要格式化为不同的字符串表示形式,如下所示 -

输入数据帧

+----+----+-------------+
|name|code|         date|
+----+----+-------------+
|   A|   1|1545905416000|
|   B|   3|1545905416000|
|   C|   5|1545905416000|
+----+----+-------------+

预期输出数据帧

+----+----+-------------+
|name|code|         date|
+----+----+-------------+
|   A|   1|   2018-12-27|
|   B|   3|   2018-12-27|
|   C|   5|   2018-12-27|
+----+----+-------------+

这不起作用,因为它为所有值提供了null -

 peopleDFCsv.withColumn("formatted_date", 
            functions.date_format(functions.col("date"), "yyyy-MM-dd"))
            .show();

date_format函数适用于时间戳,而不是自纪元以来的毫秒。尝试使用 CAST 进行转换:

df.withColumn("formatted_date",
  functions.date_format(expr("CAST(date/1000 AS TIMESTAMP)"), "yyyy-MM-dd"))
  .show()
//    Outputs:
//    +----+----+-------------+--------------+
//    |name|code|         date|formatted_date|
//    +----+----+-------------+--------------+
//    |   A|   1|1545905416000|    2018-12-27|
//    |   B|   3|1545905416000|    2018-12-27|
//    |   C|   5|1545905416000|    2018-12-27|
//    +----+----+-------------+--------------+

您之所以null是因为date_format将您的字符串解释为时间戳,例如 "2018-12-27 11:10:16" 。的纯数字不符合它期望的格式,因此它只返回 null。

相关内容

  • 没有找到相关文章

最新更新