Dataframe 在Spark中广播数据帧时会出现哪些缺点?

Dataframe 在Spark中广播数据帧时会出现哪些缺点?,dataframe,apache-spark,optimization,shuffle,broadcasting,Dataframe,Apache Spark,Optimization,Shuffle,Broadcasting,我知道,当试图最大限度地减少节点间的数据混乱时,广播变得非常有用。例如,在下面的代码中,我向航班广播airports_df,以尽量减少加入操作期间的混乱 broadcast_df = flights_df.join(broadcast(airports_df), \ flights_df["Destination Airport"] == airports_df["IATA"] ) 1.)现在,广播不需要在我的工作节点上增加存储空间吗?广播的df将驻留在内存中吗?如果它太大而无法保存在员工的记

我知道,当试图最大限度地减少节点间的数据混乱时,广播变得非常有用。例如,在下面的代码中,我向航班广播airports_df,以尽量减少加入操作期间的混乱

broadcast_df = flights_df.join(broadcast(airports_df), \
flights_df["Destination Airport"] == airports_df["IATA"] )
1.)现在,广播不需要在我的工作节点上增加存储空间吗?广播的df将驻留在内存中吗?如果它太大而无法保存在员工的记忆中怎么办


2.)广播会导致I/O瓶颈吗

当广播的df足够小,可以放入内存时,您应该使用广播,如果广播的df比您想要加入的df小得多,那么与随机操作相比,您将得到更少的I/O。默认情况下,Spark使用10MB的阈值来确定df是否适合广播,并且可以自己进行优化。当然,阈值是可配置的。我在DFs上使用的广播在合理的情况下达到数十甚至数百mb(即另一个df达到数十GB甚至更多)。
所以最终都要权衡了…

为了回答你的问题

  • 现在,广播不需要在我的工作节点上增加存储空间吗?广播的df将驻留在内存中吗?如果它太大而无法保存在员工的记忆中怎么办
  • 广播变量保存在每个工作节点的缓存内存中,不确定您所说的附加存储是什么意思,但它只不过是缓存内存,是的,我们可以说它是spark内存以外的附加内存

    如前所述,广播df驻留在工作进程的缓存中

    默认情况下,最大10mb的广播变量适合内存,您可以通过spark.sql.autoBroadcastJoinThreshold参数对其进行控制。但不确定阈值

  • 广播会导致I/O瓶颈吗
  • 当您广播一个值时,它只复制到执行器一次。因此,在spark执行期间,不会重复洗牌数据集,从而减少网络I/O


    编辑针对您的问题的答案,希望对您有所帮助。