使用 Spark Dataframe API 格式化时间戳值 [重复]
Posted
技术标签:
【中文标题】使用 Spark Dataframe API 格式化时间戳值 [重复]【英文标题】:Format timestamp value using Spark Dataframe API [duplicate] 【发布时间】:2018-12-27 11:45:52 【问题描述】:我有一个带有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();
【问题讨论】:
或Scala: Spark SQL to_date(unix_timestamp) returning NULL 【参考方案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。
【讨论】:
以上是关于使用 Spark Dataframe API 格式化时间戳值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 Pyspark 从 REST API 获取数据到 Spark Dataframe
Spark Sql 与 Spark Dataframe API
Spark-Scala:使用异常处理将固定宽度线解析为 Dataframe Api
Spark DataFrame - 使用 Java API 选择列列表