Привет вопрос касательно оптимизации запроса.
- У меня есть некоторые большие и долгие вычисления с таблицей.
- Перед следующей трансформацией пускай у меня есть в датафреме df_init следующие колонки period, client_id, income.
- Следующей трансформацией для датафрейма является фильтрация по определенному period по некоторым признакам с income (например income > 200). Далее идет select client_id и добавление некоторого флага is_fraud = 1, пускай это будет новый df_exclude
- И вот теперь я хочу df_exclude заджоинить с df_init, т.о. в df_init для всех client_id, которые есть в df_exclude, будет is_fraud = 1 независимо от period
- В итоге делается некоторая action операция с df_init в конце, запись на диск
Как реализовать у меня вопросов нет. Проблема в следующем - я заметил, что спарк делает 2 параллельных поддерева вычислений для df_exclude и df_init, которые до момента их взамодействия одинаковые и соответственно все операции он также дублирует и запускате параллельно, которые довольно тяжелые.
Моя цель - сделать некоторое общее поддерева, которое оптимизитатор переиспользует, т.е. в буквальном смысле закешировал общий этап до их различных между собой преобразований. Самый тупой вариант я вижу запись на диск общего этапа и потом чтение. Возможно есть способы сделать это эффективнее ?