[英]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.