Поле DOB в Pyspark

Я хочу рассчитать возраст и из поля DOB. Но в моем коде я жестко это кодирую. Но нужно делать динамично, как сегодня - ДОБ. Точно так же я также хочу рассчитать продолжительность от start_date. Мой фрейм данных выглядит так -

id                        dob                           start_date
77                     30/09/1990                     2019-04-13 15:27:22
65                     15/12/1988                     2018-12-26 23:28:12
3                      08/12/2000                     2018-12-26 23:28:17

У меня пока - Для расчета возраста

df= df.withColumn('dob',to_date(unix_timestamp(F.col('dob'),'dd/MM/yyyy').cast("timestamp")))
end_date = '3/09/2019'
end_date = pd.to_datetime(end_date, format="%d/%m/%Y")
df= df.withColumn('end_date',F.unix_timestamp(F.lit(end_date),'dd/mm/yyyy').cast("timestamp"))
df = df.withColumn('age', (F.datediff(F.col('end_date'), F.col('dob')))/365)
df= df.withColumn("age", func.round(df["age"], 0))

For duration calculation - 

end_date_1 = '2019-09-30'
end_date_1 = pd.to_datetime(end_date_1, format="%Y-%m-%d")
df= df.withColumn('end_date_1',F.unix_timestamp(F.lit(end_date_1),'yyyy-MM-dd HH:mm:ss').cast("timestamp"))
df= df.withColumn('duration', (F.datediff(F.col('end_date_1'), F.col('created_at'))))

В двух приведенных выше кодах я жестко запрограммировал два значения. Один - end_date = '2019-09-30', другой - end_date_1 = '2019-09-30'. Но хочу сделать это на основе даты todays (). Как это сделать в парке?


person Pallavi Verma    schedule 04.10.2019    source источник
comment
почему бы не использовать встроенную функцию: current_date() spark.apache.org/docs/2.4.0/api/python/   -  person jxc    schedule 04.10.2019


Ответы (1)


Вы можете использовать date.today (), чтобы получить сегодняшнюю дату, поскольку вы используете python с искрой. Дополнительную информацию о желаемом формате даты можно найти здесь официальной документации Python

person Nikhil Maheshwari    schedule 04.10.2019
comment
Есть ли какие-либо пакеты, которые нужно установить? На самом деле возникла ошибка - NameError: имя 'date' не определено ... хотя установить два pck ... import datetime из pyspark.sql.functions import col, unix_timestamp, to_date - person Pallavi Verma; 04.10.2019
comment
@PallaviVerma Да, вам нужно добавить импорт для datetime: from datetime import date, обратитесь к документации в ссылка предоставлена. - person Nikhil Maheshwari; 04.10.2019
comment
Уже добавлено с даты импорта datetime ... но все еще появляется ошибка - 'ValueError: time data datetime.date (2019, 10, 4) не соответствует формату'% d /% m /% Y '(match)' мой полный код is - df1 = df1.withColumn ('dob', to_date (unix_timestamp (F.col ('dob'), 'dd / MM / yyyy'). cast (timestamp))) end_date = date.today () end_date = pd .to_datetime (end_date, format =% d /% m /% Y) df1 = df1.withColumn ('end_date', F.unix_timestamp (F.lit (end_date), 'dd / mm / yyyy'). cast (временная метка) ) df1 = df1.withColumn ('age', (F.datediff (F.col ('end_date'), F.col ('dob'))) / 365) df1 = df1.withColumn (age, func.round ( df1 [возраст], 0)) - person Pallavi Verma; 04.10.2019
comment
ValueError: данные времени datetime.date (2019, 10, 4) не соответствуют формату "% d /% m /% Y". В сообщении об ошибке четко указан формат указанная дата не совпадает - person Joby; 04.10.2019
comment
@PallaviVerma Формат даты в вашем фрейме данных не соответствует формату даты по умолчанию для Python. Вы можете использовать date.today().strftime("%d/%m/%y") для изменения формата. - person Nikhil Maheshwari; 04.10.2019