首页 > 解决方案 > Pyspark 中的 DOB 字段

问题描述

我想计算年龄和出生日期字段。但是在我的代码中,我很难对其进行编码。但是需要像今天这样动态地做 - 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() 日期执行此操作。如何在pyspark中做到这一点?

标签: pysparkpyspark-sqlpyspark-dataframes

解决方案


您可以使用 date.today() 来获取今天的日期,就像您使用 python 和 spark 一样。有关所需日期格式的更多信息,请参见官方 python 文档


推荐阅读