【发布时间】:2018-05-21 19:48:37
【问题描述】:
我有一个 spark 数据框,其中有 2 列代表日期(date1 和 date2)。我想找到两个日期之间的相对周数(+ 1 周)。为了做到这一点,我找到每个日期的星期并减去两者。 date2 始终是较早的日期。日期之间的最大差异最多为 1 年,因此如果 date2 来自前一年,我需要在解决方案中添加 52。
我想出了怎么做,但我的解决方案似乎很麻烦。这是我的解决方案:
from pyspark.sql.functions import date_format, udf
from pyspark.sql.types import IntegerType
def fixWeeks(w):
if w < 0:
w = w + 52
return w
week_filter = udf(fixWeeks,IntegerType())
df_week = df.withColumn("TmpWeek", date_format("date1",'w').cast('int')-date_format("date2",'w').cast('int')+1)
df_week = df_week.withColumn('week',week_filter(df_week.TmpWeek)).drop('TmpWeek')
有没有更好的方法来实现相同的解决方案?我怎样才能在一个函数中做同样的事情?
【问题讨论】:
-
你不能只计算天数的差异并除以 7 吗?如果您可以 edit 您的问题提供一个小样本输入数据框和相应的所需输出,那将会很有帮助。
-
好电话。我可以这样做: df_week = df.withColumn('week',ceil(datediff('date1','date2')/7))
标签: pyspark