找出两个日期之间的相对周数

时间:2018-05-21 19:48:37

标签: pyspark

我有一个带有2列的spark数据帧,表示日期(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')

有没有更好的方法来实现相同的解决方案?我怎样才能在一个函数中做同样的事情?

1 个答案:

答案 0 :(得分:1)

一种简单的方法是使用pyspark.sql.functions.datediff()计算日期之间的差异,除以7,然后取上限。

例如:

from pyspark.sql.functions import ceil, datediff
df_week = df.withColumn('week', ceil(datediff('date1','date2')/7))