Date 使用Spark Dataframe API格式化时间戳值

Date 使用Spark Dataframe API格式化时间戳值,date,apache-spark,apache-spark-sql,timestamp,Date,Apache Spark,Apache Spark Sql,Timestamp,我有一个数据框,其中有一个日期列,以字符串格式表示Unix时间戳。列值需要格式化为不同的字符串表示形式,如下所示- 输入数据帧 +----+----+-------------+ |name|code| date| +----+----+-------------+ | A| 1|1545905416000| | B| 3|1545905416000| | C| 5|1545905416000| +----+----+-------------+ +--

我有一个数据框,其中有一个
日期
列,以
字符串
格式表示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|
+----+----+-------------+
预期输出数据帧

+----+----+-------------+
|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();
该函数使用的时间戳不是从历元开始的毫秒。尝试使用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\u格式将字符串解释为时间戳,例如
“2018-12-27 11:10:16”
。的纯数字不符合它期望的格式,因此它只返回null。