#apache-spark #join #pyspark #left-join
Вопрос:
Я очень новичок в ресурсах конфигурации spark и хотел бы понять основные различия между использованием левого соединения и перекрестного соединения в spark в поведении ресурсов/вычислений.
Ответ №1:
Если поставляемый объем записи и конфигурации spark(ядра и память) одинаковы, я полагаю, что основной выигрыш будет от базовой фильтрации строк(условие соединения) для некартовых соединений, использующих относительно меньшие ядра и память.
Когда обе ваши таблицы имеют одинаковый размер/количество записей:
Декартовы или перекрестные соединения будут чрезвычайно дорогими, так как они могут легко увеличить количество выходных строк.
Представьте себе 10 000 Х 10 000 = 100 миллионов
все строки из соответствующих наборов данных будут считываться, сортироваться и записываться (n ядер) и помещаться в память для объединения, таким образом, занимая большую площадь
Внутренние/Внешние соединения будут работать по принципам map/reduce и совместной локализации
путем фильтрации строк, соответствующих условию соединения(этап сопоставления), из таблиц данных с использованием n ядер с последующим перемешиванием и сортировкой по локальным исполнителям и выводом результата(сокращение).
Но, когда одна из ваших таблиц имеет меньший размер/количество записей:
меньшая таблица будет прочитана, построит хэш-таблицу и запишет ее, используя (возможно) один раздел, т. Е. передаст каждому исполнителю чтение X разделов большой таблицы