我试图转换这样的字符串"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')"))