首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >星火如何在广播连接中广播数据

星火如何在广播连接中广播数据
EN

Stack Overflow用户
提问于 2022-10-01 14:11:37
回答 1查看 156关注 0票数 0

当我们使用广播连接和提示时,火花是如何广播数据的--正如我在使用广播提示时所看到的:它调用这个函数

代码语言:javascript
运行
复制
 def broadcast[T](df: Dataset[T]): Dataset[T] = {
    Dataset[T](df.sparkSession,
      ResolvedHint(df.logicalPlan, HintInfo(strategy = Some(BROADCAST))))(df.exprEnc)
  }

,它内部调用dataset的应用方法&使用logicalPlan设置ResolvedHint

代码语言:javascript
运行
复制
val dataset = new Dataset(sparkSession, logicalPlan, implicitly[Encoder[T]])

但这之后是什么。这实际上是如何工作的,为之编写的代码在哪里。

  1. 如果我们有多个小数据集的分区(我们将进行广播),那么spark是否合并了所有分区&然后广播呢?
  2. 它是先向驱动程序广播吗?然后是执行程序。
  3. 什么是BitTorrent。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-03 13:50:06

对于广播过程中的1和2,连接数据是在驱动程序上收集的,以后发生的事情取决于连接算法。

对于BroadcastHashJoin(BHJ)驱动程序,生成哈希表,然后将此表分发给执行者。

对于BroadcastNestedLoops,广播数据集作为数组分发给执行者。

因此,您可以看到,这里没有保存初始结构,需要将整个广播数据集放入驱动程序的内存中(否则,由于驱动程序出现oom错误,作业将失败)

关于3,你到底想知道什么?

星星之火中有TorrentBroadcast,它是像BitTorrent那样的广播实现。我对这件事不太了解(我从来没必要这么深入地挖掘),但如果你想知道更多,我想你可以从这里开始:

TorrentBroadcast docu

TorrentBroadcast源代码

HttpBroadcast docu -它的其他广播算法

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73918989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档