Не использовать оператор равенства при присоединении к Spark - PullRequest
0 голосов
/ 06 мая 2020

Я выполняю серию операций в своей записной книжке 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 присоединяются к более крупной таблице для получения контекстных полей.

Проблема в том, что этот код работает вечно, потому что, как я понимаю, соединения не используют равное для его условия выполняет декартово соединение, а затем фильтрует результаты.

...