pyspark数据框中的不同日期格式
different date format in pyspark dataframe
**如何处理pyspark df中不同类型的日期格式。我收到空值。
data=[["1","02-10-2020"],["2","03-15-2019"],["3","04-05-2021"], ['4', '02/19/2021'], ['5', '01/25/2022']]
df=spark.createDataFrame(data,["id","Date"])
df.show()
df.printSchema()
+---+----------+
| id| Date|
+---+----------+
| 1|02-10-2020|
| 2|03-15-2019|
| 3|04-05-2021|
| 4|02/19/2021|
| 5|01/25/2022|
+---+----------+
root
|-- id: string (nullable = true)
|-- Date: string (nullable = true)
我试过用这种方法得到 null 而不是 day
df.select('Date', to_date(col('Date'), 'MM-dd-yyyy').alias('New_date')).show()
+----------+----------+
| Date| New_date|
+----------+----------+
|02-10-2020|2020-02-10|
|03-15-2019|2019-03-15|
|04-05-2021|2021-04-05|
|02/19/2021| null|
|01/25/2022| null|
+----------+----------+
我需要的输出:
+----------+----------+
| Date| New_date|
+----------+----------+
|02-10-2020|2020-02-10|
|03-15-2019|2019-03-15|
|04-05-2021|2021-04-05|
|02/19/2021|2021-02-19|
|01/25/2022|2022-01-25|
+----------+----------+
您的数据有 2 种不同的格式。所以你需要 2 个不同的过程:
from pyspark.sql import functions as F
df.select(
"Date",
F.coalesce(
F.to_date(F.col("Date"), "MM-dd-yyyy"),
F.to_date(F.col("Date"), "MM/dd/yyyy"),
).alias("new_date"),
).show()
您也可以将字符串中的 /
替换为 -
。
除了@Steven 的回答之外,您还可以执行以下操作 -
from pyspark.sql.functions import *
df1 = df.withColumn("New_date", to_date(regexp_replace(col("Date"), "/", "-"), "MM-dd-yyyy"))#.drop("Date")
df1.show()
输出-
+---+----------+----------+
| id| Date| New_date|
+---+----------+----------+
| 1|02-10-2020|2020-02-10|
| 2|03-15-2019|2019-03-15|
| 3|04-05-2021|2021-04-05|
| 4|02/19/2021|2021-02-19|
| 5|01/25/2022|2022-01-25|
+---+----------+----------+
**如何处理pyspark df中不同类型的日期格式。我收到空值。
data=[["1","02-10-2020"],["2","03-15-2019"],["3","04-05-2021"], ['4', '02/19/2021'], ['5', '01/25/2022']]
df=spark.createDataFrame(data,["id","Date"])
df.show()
df.printSchema()
+---+----------+
| id| Date|
+---+----------+
| 1|02-10-2020|
| 2|03-15-2019|
| 3|04-05-2021|
| 4|02/19/2021|
| 5|01/25/2022|
+---+----------+
root
|-- id: string (nullable = true)
|-- Date: string (nullable = true)
我试过用这种方法得到 null 而不是 day
df.select('Date', to_date(col('Date'), 'MM-dd-yyyy').alias('New_date')).show()
+----------+----------+
| Date| New_date|
+----------+----------+
|02-10-2020|2020-02-10|
|03-15-2019|2019-03-15|
|04-05-2021|2021-04-05|
|02/19/2021| null|
|01/25/2022| null|
+----------+----------+
我需要的输出:
+----------+----------+
| Date| New_date|
+----------+----------+
|02-10-2020|2020-02-10|
|03-15-2019|2019-03-15|
|04-05-2021|2021-04-05|
|02/19/2021|2021-02-19|
|01/25/2022|2022-01-25|
+----------+----------+
您的数据有 2 种不同的格式。所以你需要 2 个不同的过程:
from pyspark.sql import functions as F
df.select(
"Date",
F.coalesce(
F.to_date(F.col("Date"), "MM-dd-yyyy"),
F.to_date(F.col("Date"), "MM/dd/yyyy"),
).alias("new_date"),
).show()
您也可以将字符串中的 /
替换为 -
。
除了@Steven 的回答之外,您还可以执行以下操作 -
from pyspark.sql.functions import *
df1 = df.withColumn("New_date", to_date(regexp_replace(col("Date"), "/", "-"), "MM-dd-yyyy"))#.drop("Date")
df1.show()
输出-
+---+----------+----------+
| id| Date| New_date|
+---+----------+----------+
| 1|02-10-2020|2020-02-10|
| 2|03-15-2019|2019-03-15|
| 3|04-05-2021|2021-04-05|
| 4|02/19/2021|2021-02-19|
| 5|01/25/2022|2022-01-25|
+---+----------+----------+