我有一个数据框,其中有一个date
列,它以String
格式表示Unix时间戳。列值需要格式化为以下不同的String表示形式-
输入数据框
+----+----+-------------+
|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();
答案 0 :(得分:1)
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。