在调查spark作业的性能时,我注意到spark uisqldag视图中正在执行sortmergejoin,而不是预期的broadcasthashjoin。
代码如下所示:
val df1 = // Some DataFrame
val df2 = // Some DataFrame
def df2Selected =
df2
.select(...)
df1
.join(
broadcast(df2Selected),
// join clause,
"left_outer"
)
但是-如果我修改df2selected以添加 coalesce(1)
然后重新运行,然后我看到预期的广播hashjoin。
def df2Selected =
df2
.select(...)
.coalesce(1)
有谁能告诉我这是怎么回事,如果我能强迫广播不凝聚?
我敢打赌,coalesce以某种方式允许spark推断从df2selected返回的Dataframe的大小,因此spark将允许广播。
暂无答案!
目前还没有任何答案,快来回答吧!