Algo que podemos perder como engenheiros quando falamos AQE - Adaptive Query Execution
sobre Spark/Databricks:
Se você estiver usando coalesce()
para reduzir partições, o AQE não afetará isso. Sem detecção de distorção. Sem reparticionamento. Sem otimização. Porque coalesce()
não executa embaralhamento completo (como repartition()
) - ele mescla partições existentes sem redistribuir. É assim que a distorção de dados pode aparecer silenciosamente coalesce()
e interromper ou tornar seus trabalhos mais lentos. Achei a documentação um pouco confusa. O AQE intervirá após você fazer algo repartition()
que acione um embaralhamento completo. Este entendimento está correto? A documentação parece pouco clara neste cenário.
Sim, você está correto em sua afirmação/pergunta.
Coalesce(n)
não resulta em um embaralhamento amplo/completo, por assim dizer —repartition(n)
como você disse. É uma espécie de mesclagem.Portanto, não há sinal para o Catalyst para otimização de tempo de execução para ver se
AQE
pode ser aplicado - já que não há embaralhamento completo a ser detectado, o que serve como uma otimização, condição precursora para invocarAQE
.JOIN
s egroupBy()
outros precursores.NB: Há algum movimento e, portanto, redistribuição de dados com um
coalesce(n)
.