我需要将日期字符串转换为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")
型
3条答案
按热度按时间xtupzzrd1#
字符串
v64noz0r2#
下面是一个没有UDF的类似解决方案,使用when表达式进行月份转换。
字符串
jhiyze9q3#
在下面的例子中,我使用了一个Map表达式:
字符串