我有一个 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')
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来实现相同的解决方案?我怎样才能在一个函数中做同样的事情?
一种简单的方法是使用 计算日期之间的差异(以天pyspark.sql.functions.datediff()为单位),除以 7,然后取上限。
例如:
from pyspark.sql.functions import ceil, datediff
df_week = df.withColumn('week', ceil(datediff('date1','date2')/7))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6177 次 |
| 最近记录: |