рабочие места с логикой условной фильтрации для нескольких арендаторов - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть таблица типа

tenant_id,start_date,end_date,use_fancy_transformation
1,20180101,20180201,true
2,20180103,20180115,false

и датафрейм типа

tenant_id,thing,date,value
1,1,20180105,1
2,2,20180107,2
1,2,20180120,2

Теперь есть некоторая бизнес-логика, которая должна выполнять разные вещи (условно).Простейший случай - экспорт данных за указанный диапазон дат из первой таблицы.Очевидно, диапазон дат для каждого арендатора различен.

Поэтому при выполнении (в псевдокоде) df.filter(date between(tenant2_start, tenant2_end).write.partitionBy("tenant_id", "current_date").parquet применяется фильтр, а содержимое для арендатора 1. теряется.

Возможные решения, которые я придумала(никто не удовлетворяет меня, все кажутся неуклюжими):

  • Не распараллеливание таблицы конфигурации, а затем повторение каждой записи.Однако это может потребовать некоторых довольно дорогостоящих преобразований для повторного запуска (которые оптимально будут вычисляться только один раз).
  • Возможно выполнение только итераций на объекте конфигурации после дорогостоящих преобразований, но я не делаюдумаю, что это было бы хорошим решением, так как когда экспорт для первого арендатора работает, но не выполняется для второго, тогда искра / пряжа перезапустится с нуля и пересчитает оба.
  • Другим возможным решением будет параметризация конфигурации извне с помощью рабочего потока (например, Oozie / Airflow), однако это вызывает много заданий (в случае присутствия большого количества арендаторов).Помните дорогостоящие преобразования.

Видите ли вы элегантный выход?

1 Ответ

0 голосов
/ 17 сентября 2018

Non eqi join отлично работает для решения проблемы

...