date - 使用 Spark Dataframe 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。
推荐阅读
- javascript - Session Flask 不会在浏览器上设置 cookie,Postman 会
- pandas - Pandas 在匹配字段上查找
- c - 使用 GDB 时缺少 ELF 符号“var”?
- wordpress - 尝试在 WordPress 联系表单上编辑一些静态文本
- function - 如何找出正数且具有 ' 的数据。'在数据中?
- c++ - 使用地图的简单加密/解密程序
- excel - 如何遍历 Excel 工作簿中的工作表并转置每张工作表中的数据?
- react-native - 如何使用 react-native-video 从谷歌驱动器播放视频?
- css - Vue.js:如何修改 BootstrapVue 表中选定变量的颜色?
- c++ - 如何阻止我的程序输出时间,这使我的程序难以阅读