Найти относительные недели между двумя датами - PullRequest
0 голосов
/ 21 мая 2018

У меня есть искровой фрейм данных с 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')

Есть ли лучший способ достичь того же решения?Как я могу сделать то же самое в одной функции?

1 Ответ

0 голосов
/ 21 мая 2018

Простой способ - вычислить разницу между датами в днях, используя pyspark.sql.functions.datediff(), разделить на 7 и взять потолок.

Например:

from pyspark.sql.functions import ceil, datediff
df_week = df.withColumn('week', ceil(datediff('date1','date2')/7))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...