簡體   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