【问题标题】:Find the relative weeks between two dates查找两个日期之间的相对周数
【发布时间】: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


【解决方案1】:

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

例如:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 2020-07-19
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2013-05-03
    相关资源
    最近更新 更多