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