Повторное использование перемешивания псевдонимов таблиц в SparkSQL - PullRequest
0 голосов
/ 19 июня 2020

У меня есть запрос с использованием псевдонимов таблиц в SparkSQL 2.4, где основная таблица («product») присоединяется к другой таблице («alias_tbl») дважды , но с другими псевдонимами -

create temporary view product as
select 
prod_id, prod2_id
from product;

create temporary view alias_tbl as
select
prod_id, store_name
from store
group by 1, 2;

create temporary view final_vw as
select p.prod_id, 
       t1.store_name as name1, 
       t2.store_name as name2
from product p
left join alias_tbl t1
p.prod_id = t1.prod_id
left join alias_tbl t2
on p.prod_id2 = t2.prod_id;

Как показано выше, alias_tbl дедуплицируется только один раз, прежде чем он впоследствии будет дважды объединен с таблицей «product» через псевдонимы.
Представление DAG в Spark UI показывает соединения (с alias_tbl) как 2 отдельные ветви. Однако показано, что дедупликация (HashAggregate, вызванная Group By) происходит дважды - один раз для каждой из этих 2 ветвей сглаживания. Я также заметил, что было 2 Shuffles (Exchange) на основе того же ключа т.е. alias_tbl.prod_id на каждой из веток перед окончательным соединением.

Мой вопрос - Поскольку в приведенных выше запросах Group By в alias_tbl встречается только один раз (перед последним объединением в Query-3), почему агрегация происходит в обеих ветвях). Я ожидал, что, поскольку дедупликация alias_tbl происходит только один раз перед объединениями, Spark выполнит это (агрегирование и обмен) только ONCE (вместо двух) перед объединениями и будет повторно использовать это в обе ветви.

Может кто-нибудь объяснить, почему есть 2 агрегирования (и перемешивание) на обеих ветвях псевдонимов, а не только 1, поскольку это одна и та же таблица (с использованием псевдонимов)? Есть ли способ переписать этот запрос так, чтобы HashAggregation и Shuffle появлялись только один раз (перед окончательным соединением и ускорением запроса? Я использую SparkSQL (2.4).

Пожалуйста дайте мне знать, если потребуется дополнительная информация. Любая помощь приветствуется. Спасибо.

...