将字符串转换为日期YYYY-MM



我试图转换这样的字符串"2016-05";以pyspark数据帧到日期格式。我知道如何转换这个字符串";2016-05-01";到目前为止,但当我只有年份和月份时,我就错了。这是我的df和代码:

df.withColumn("date",expr("substring(date, 1, 7)")).show()
+--------------------+-------+--------------------+--------------------+--------------------+
|             journal|   date|               title|             content|              author|
+--------------------+-------+--------------------+--------------------+--------------------+
|FirstList (Presco...|2016-05|Business For Sale...| Casual dining re...|                null|
|FirstList (Presco...|2016-05|Business For Sale...| Here you go... T...|                null|

我使用udf函数将字符串列转换为日期:

cast_to_date = udf(lambda x: datetime.strptime(x, '%Y-%m'), DateType())
df = df.withColumn('date', cast_to_date(col('date')))
df.show()

但我有一个错误:

raise ValueError("unconverted data remains: %s" %
ValueError: unconverted data remains: -12

我知道这是约会模式的问题,但我不知道为什么。也许我们不能只有一个只有年份和月份的日期字段?我看了一些关于这方面的话题,但我从未找到解决方案。。。如果有人有解决方案,请提前感谢!

您不需要UDF来完成此操作。您可以将to_date与仅包括年和月的格式一起使用。

import pyspark.sql.functions as F
df2 = df.withColumn("date", F.expr("to_date(substring(date, 1, 7), 'yyyy-MM')"))

最新更新