Я выполняю серию операций в своей записной книжке Databricks и нуждаюсь в предложениях по оптимизации кода / процесса. Вот шаги, которые я выполняю:
1) Я пытаюсь объединить два фрейма данных, один из которых содержит около 200 миллионов записей, а другой - 60 тысяч. В меньшей таблице 5 столбцов с 5 типами адресов электронной почты. Я разбил это на 5 разных фреймов данных, каждый из которых имеет свой столбец адреса электронной почты, чтобы избежать использования оператора OR в условиях соединения. Точно так же я разбил большую таблицу, чтобы иметь только уникальный идентификатор и столбец URL.
Пример кода выглядит следующим образом: Условие соединения использует "содержит" для проверки значений столбца. Что-то вроде этого,
df_zp0 = df_z.join(broadcast(pt_t), df_z.url1.contains(pt_t.toAddress2), how = "inner")
2) После того, как все разные столбцы объединены и результаты сохранены в 5 DF, я затем объединяю результат и создаю один DF, который хранит результат.
3) Выходные данные шага 2 присоединяются к более крупной таблице для получения контекстных полей.
Проблема в том, что этот код работает вечно, потому что, как я понимаю, соединения не используют равное для его условия выполняет декартово соединение, а затем фильтрует результаты.