#python #apache-spark #pyspark #apache-spark-sql
Вопрос:
Я попытался преобразовать строку, подобную этой «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
Я знаю, что это проблема с шаблоном даты, но я не знаю, почему. Может быть, у нас не может быть поля даты только с годом и месяцем ? Я смотрел некоторые темы об этом, но так и не нашел решения … Если у кого-то есть решение, спасибо за заранее !
Ответ №1:
Для этого вам не нужен UDF. Вы можете использовать to_date
формат, включающий только год и месяц.
import pyspark.sql.functions as F
df2 = df.withColumn("date", F.expr("to_date(substring(date, 1, 7), 'yyyy-MM')"))