Каковы основные различия в вычислительных ресурсах между левым соединением и перекрестным соединением?

#apache-spark #join #pyspark #left-join

Вопрос:

Я очень новичок в ресурсах конфигурации spark и хотел бы понять основные различия между использованием левого соединения и перекрестного соединения в spark в поведении ресурсов/вычислений.

Ответ №1:

Если поставляемый объем записи и конфигурации spark(ядра и память) одинаковы, я полагаю, что основной выигрыш будет от базовой фильтрации строк(условие соединения) для некартовых соединений, использующих относительно меньшие ядра и память.

Когда обе ваши таблицы имеют одинаковый размер/количество записей:

Декартовы или перекрестные соединения будут чрезвычайно дорогими, так как они могут легко увеличить количество выходных строк.

Представьте себе 10 000 Х 10 000 = 100 миллионов

все строки из соответствующих наборов данных будут считываться, сортироваться и записываться (n ядер) и помещаться в память для объединения, таким образом, занимая большую площадь

Внутренние/Внешние соединения будут работать по принципам map/reduce и совместной локализации

путем фильтрации строк, соответствующих условию соединения(этап сопоставления), из таблиц данных с использованием n ядер с последующим перемешиванием и сортировкой по локальным исполнителям и выводом результата(сокращение).

Но, когда одна из ваших таблиц имеет меньший размер/количество записей:

меньшая таблица будет прочитана, построит хэш-таблицу и запишет ее, используя (возможно) один раздел, т. Е. передаст каждому исполнителю чтение X разделов большой таблицы