У меня есть запрос (приведенный ниже), и когда я его запускаю, иногда Spark выдает эту ошибку -
org.apache.spark.SparkException: Could not execute broadcast in 300 secs. You can increase the timeout for broadcasts via spark.sql.broadcastTimeout or disable broadcast join by setting spark.sql.autoBroadcastJoinThreshold to -1
1 statement failed.
Execution time: 5m 56s
Мы извлекаем данные из источника и применяем несколько логических схем преобразования на разных этапах во временных представлениях.
Упрощенная версия запроса, который я выполняю, -
create temporary view my_date AS
select max(max_eff_dt) as eff_dt
from (
select max(eff_dt) as max_eff_dt from tableA
union
select max(eff_dt) as max_eff_dt from tableB
union
select max(eff_dt) as max_eff_dt from tableC
);
create temporary view AS
select a.x, b.x, c.y, dt.eff_dt
from tableA a
inner join tableB b
on a.x = b.x
inner join tableC c
on b.y = c.y
cross join my_date dt
where a.join_dt < dt.eff_dt
and b.join_dt < dt.eff_dt
and c.join_dt < dt.eff_dt;
Однако Spark не выдает эту ошибку всегда, а только в определенные моменты времени.
Может кто-нибудь, пожалуйста, помогите мне понять причину этой ошибки и устранить ее. Хотя set spark.sql.autoBroadcastJoinThreshold = -1
заботится об ошибке, я хочу понять причину этой ошибки и как изменить мой код, чтобы избежать этого в будущем.
Кроме того, было бы здорово, если бы кто-то мог указать мне на любой онлайнресурсы о настройке производительности запросов Spark-SQL.
Пожалуйста, дайте мне знать, если требуется дополнительная информация об ошибке.