Size: a a a

2021 December 07

ЕГ

Евгений Глотов... in Moscow Spark
Не понял, зачем джойн
источник

ЕГ

Евгений Глотов... in Moscow Spark
Что есть end_date?
источник

ЕГ

Евгений Глотов... in Moscow Spark
Дата следующей записи с тем же id и action?
источник

CO

Chern Oleksander in Moscow Spark
вот именно нет (
источник

ЕГ

Евгений Глотов... in Moscow Spark
Нет, мой вопрос про то, какой смысл в неё вкладывается?
источник

CO

Chern Oleksander in Moscow Spark
минутку, сейчас покажу
источник

ЕГ

Евгений Глотов... in Moscow Spark
А то на спарке можно легко сделать всё, что угодно, главный вопрос в том, что нужно сделать😆
источник

CO

Chern Oleksander in Moscow Spark
Потом эту колонку можно будет использовать чтобы сделать (типа декардовое)

my_df = (my_df
       .withColumn('date_to',F.lag('date_from',-1).over(Window.partitionBy('id').orderBy('date_from')))
       .withColumn('date_to', F.date_add(F.col('date_to'),-1))
       )
cur_date = F.from_utc_timestamp(F.current_timestamp(),"Europe/Kiev")

# df_not_null = my_df.na.fill(value=,subset=['date_to'])
nnn_df = my_df.join(df_calendar,
 on=df_calendar['date_rep'].between(my_df['date_from'], my_df['date_to'])
                        & (n_my_df['date_from']<=df_calendar['date_rep'])
источник

CO

Chern Oleksander in Moscow Spark
Только чёт не могу null убрать, день сегодня точно не мой ((
источник

ЕГ

Евгений Глотов... in Moscow Spark
Аа, тебе нужно интервал превратить в список дней, из которых он состоит?
источник

CO

Chern Oleksander in Moscow Spark
ага )))
источник

ЕГ

Евгений Глотов... in Moscow Spark
Вот так бы сразу и сказал)
источник

ЕГ

Евгений Глотов... in Moscow Spark
Берёшь udf, которая генерирует список дат от date_from до date_to
источник

ЕГ

Евгений Глотов... in Moscow Spark
Делаешь explode
источник

CO

Chern Oleksander in Moscow Spark
Сорри сегодня как некогда тупняк (
Уже второй день делаю эту задачу

Но я вот так планирую сделать

my_col = ['id', 'name', 'type_name', 'date_from', 'action']
my_data = [
   ['16763', 'p1', 'type1', '2021-01-01', 'action1'],
   ['16763', 'p1', 'type2', '2021-01-10', 'action1'],
   ['16763', 'p1', 'type3', '2021-01-15', 'action3'],
   ['19622', 'p2', 'type1', '2021-01-05', 'action1'],
   ['19799', 'p3', 'type2', '2021-01-02', 'action2'],
   ['19799', 'p3', 'type1', '2021-01-10', 'action1']
]
my_cal = spark.sql("SELECT explode(sequence(to_date('2021-01-01'), to_date('2021-01-20'))) date_rep")

my_df = spark.createDataFrame(my_data, my_col)

my_df = (my_df
       .withColumn('date_to',F.lag('date_from',-1).over(Window.partitionBy('id').orderBy('date_from')))
       .withColumn('date_to', F.date_add(F.col('date_to'),-1))
       .withColumn('date_to', F.when(F.col('date_to').isNull(), F.to_date(F.lit('2021-01-20'))).otherwise(F.col('date_to')))
       )

nnn_df = my_df.join(my_cal,
 on=my_cal['date_rep'].between(my_df['date_from'], my_df['date_to'])
                        & (my_df['date_from']<=my_cal['date_rep'])
                  )

nnn_df.show()

Если получается что лаг, это легкая в отработке функция
источник

CO

Chern Oleksander in Moscow Spark
Не проверял, но пишут что  join быстрее чем explode
источник

ЕГ

Евгений Глотов... in Moscow Spark
Лаг -1 - это lead(1)😆
источник

CO

Chern Oleksander in Moscow Spark
опача ))
источник

ЕГ

Евгений Глотов... in Moscow Spark
Джойн на неравенство шлак
источник

ЕГ

Евгений Глотов... in Moscow Spark
Хотя в новом спарке появился range join
источник