忽略join中的显式广播提示

jhkqcmku  于 2021-05-27  发布在  Spark
关注(0)|答案(0)|浏览(192)

在调查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将允许广播。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题