繁体   English   中英

使用自定义格式将数据类型列从字符串更改为日期

[英]Change data type column from string to date with custom format

我有一个DF字符串列,名为“ data”,格式为02/09/2019(dd / MM / yyyy)。 我想将列的数据类型从STRING更改为DATE,并保持相同的格式。 我正在使用Spark 2.1.0。

我已经尝试过以下声明:

df.select(to_date( unix_timestamp($"data", "dd/MM/yyyy").cast("timestamp")))

它将列从STRING转换为DATE,但格式为yyyy-MM-dd:

+----------+
|      data|
+----------+
|2003-07-22|
|2003-08-01|
+----------+

使用date_format函数,可以获得正确的格式但数据类型错误(再次为STRING):

df.select(date_format(to_date( unix_timestamp($"data", "dd/MM/yyyy").cast("timestamp")), "dd/MM/yyyy") as "data").printSchema()

非常感谢。

Date数据类型期望格式为yyyy-MM-dd

如果我们的格式为dd/MM/yyyy并且不能转换为date数据类型(casting will result null value)

Example:

df.show() //sample data

+----------+
|      data|
+----------+
|22/07/2003|
|01/08/2003|
+----------+

df.selectExpr("date(data)").show() //casting to date type

+----+
|data|
+----+
|null|
|null|
+----+

How to cast to Datetype?

df.select(to_date(unix_timestamp($"data","dd/MM/yyyy").cast("timestamp")).alias("da")).show()

(要么)

df.select(from_unixtime(unix_timestamp($"data","dd/MM/yyyy"),"yyyy-MM-dd").cast("date").alias("da")).show()

+----------+
|        da|
+----------+
|2003-07-22|
|2003-08-01|
+----------+

printSchema:

df.select(from_unixtime(unix_timestamp($"data","dd/MM/yyyy"),"yyyy-MM-dd").cast("date").alias("dd")).printSchema
root
 |-- dd: date (nullable = true)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM