gpt4 book ai didi

pyspark - 使用 PySpark 中的 to_date 转换具有不同格式和荷兰语月份缩写的日期字符串

转载 作者:行者123 更新时间:2023-12-04 17:10:05 24 4
gpt4 key购买 nike

我需要将日期字符串转换为 DateType,但我在使用 to_date 时遇到了一些挑战。

day 的格式很好(1 或 2 位数字),month 是荷兰语缩写并且不起作用(仅当缩写等于英语时才有效) , year 是 2 位或 4 位数字(缺少世纪!)。

将这些全部转换为 DateType 的最佳方法是什么?
我找不到使用格式将语言环境设置为 NL 的选项。

我创建了一个 UDF,但不知道这是否是解决此问题的最佳方法。
世纪的 19 值得商榷。

代码:

@F.udf(T.StringType())
def convert_date(s):

month_dict = {"jan":"01", "feb":"02", "mrt":"03", "apr":"04", "mei":"05", "jun":"06", "jul":"07", "aug":"08", "sep":"09", "okt":"10", "nov":"11", "dec":"12" }

day, month, year = s.split("-")
if len(day) == 1:
day = '0' + day
if len(year) < 4:
year = '19' + year

date = day + "-" + month_dict[month] + "-" + year

return date

df = df.withColumn('DateOfBirth_new', F.to_date(convert_date(F.col("DateOfBirth"), "dd-M-yyyy"))

日期框架:

df = spark.createDataFrame([
["2-feb-1966"],
["05-mei-1974"],
["3-mrt-83"],
["05-mrt-1983"],
["12-jun-75"]
]).toDF("DateOfBirth")

最佳答案

这是一个没有 UDF 的类似解决方案,使用 when 表达式进行月份转换。

month_conversion =     F.expr("""CASE 
WHEN (month = 'jan') THEN 01
WHEN (month = 'feb') THEN 02
WHEN (month = 'mrt') THEN 03
WHEN (month = 'apr') THEN 04
WHEN (month = 'mei') THEN 05
WHEN (month = 'jun') THEN 06
WHEN (month = 'jul') THEN 07
WHEN (month = 'aug') THEN 08
WHEN (month = 'sep') THEN 09
WHEN (month = 'okt') THEN 10
WHEN (month = 'nov') THEN 11
WHEN (month = 'dec') THEN 12
ELSE NULL END
""").alias("m")

day_conversion = F.when(F.length("day") == 1, F.concat(F.lit("0"), F.col("day"))).otherwise(F.col("day"))
year_conversion = F.when(F.length("year") < 4, F.concat(F.lit("19"), F.col("year"))).otherwise(F.col("year"))

(df.withColumn("split",
F.split("DateOfBirth", "-")
)
.withColumn("day",
F.col("split").getItem(0)
)
.withColumn("month",
F.col("split").getItem(1)
)
.withColumn("year",
F.col("split").getItem(2)
)
.select(
F.concat_ws("-",
day_conversion,
month_conversion,
year_conversion
).alias("DateOfBirth_new")
)
.show())

关于pyspark - 使用 PySpark 中的 to_date 转换具有不同格式和荷兰语月份缩写的日期字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69656215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com