Spark-SQL我是读表格的新手Hive。我想知道Spark是如何执行多表的 Join。我在某处读到建议始终将最大的表保留在Join顺序的顶部等等,这样有利于Join效率。我读到,在 Join 中,Spark 按顺序将第一个表(最大的)加载到内存中,并流式传输另一个表,这有助于提高 Join 性能。但是,我对这种策略如何提高性能感到困惑,因为最大的表(在大多数情况下)无法容纳在内存中并溢出到磁盘上。
任何人都可以澄清并解释 Spark 在连接 [ largevs medium]、[ largevs small] 和 [ largevs large] 表时在连接类型 ( inner& outer) 和连接性能方面所采用的连接机制。我想知道在连接表排序方面应遵循的最佳实践,以实现 Spark 使用的所有连接策略(SMJ、ShuffleHash 和 Broadcast)的最佳性能。让我们假设以下查询:
select
a.id,
b.cust_nm,
c.prod_nm
from large_tab a
join medium_tab b
on a.id = b.id
join small_tab c
on a.pid = c.pid;
Run Code Online (Sandbox Code Playgroud)
注意:我们使用Spark 2.4
任何帮助深表感谢。谢谢。