在进行广播加入时,即使已经广播了以前的版本,看起来整个DataFrame也会被重播。
考虑以下简单示例:
df3.join(broadcast(df1), on=cond, ,"left_outer")
df3.join(broadcast(df1.union(df2), on=cond, ,"left_outer")
我希望只播放df2部分,但好像整个DataFrame都是广播的。
与此相关的用例是df1,df2等表示散列映射的位置。
我的想法是,我有一个DataFrames流(例如,在DStream上由foreach生成),我需要在其上进行ETL。
ETL添加了另一个列,其中包含一些基于现有列的值(因此是广播连接)。根据以前的ETL,映射会一直更新(每次都有一个小的更新)。
此映射的一侧可能变得非常重要(例如,数百MB),但是,每次更新都相对较小(例如,几KB)。
有没有办法有效地执行广播加入(或任何其他富集方式),以便每次只播放新更新的记录?
答案 0 :(得分:0)
据我所知,
broadcast(df1)
和
broadcast(df1.union(df2))
广播两个不同的变量。因为操作df1.union(df2)
实际上创建了一个新的DataFrame,显然与df1
不同。
虽然union
操作创建的新DataFrame包含df1
项,但broadcast()
对它们的处理方式不同。并广播DataFrames。
因此从理论上讲,您必须完全广播两个DataFrame才能达到预期的效果。 希望这能解决你的疑虑。