xua*_*yue 5 java scala apache-spark
在 Spark 中,我们使用广播变量来使每台机器都有一个变量的只读副本。我们通常会在闭包之外创建一个广播变量(比如闭包需要的查找表)来提高性能。
我们还有一个叫做 mapPartitions 的 spark 转换操作符,它试图实现同样的目标(使用共享变量来提高性能)。例如,在 mapPartitions 中,我们可以为每个分区共享一个数据库连接。
那么这两者有什么区别呢?我们可以仅将它用于共享变量吗?
broadcast用于将对象运送到每个工作节点。该对象将在该节点上的所有分区之间共享(并且值/即对象对于集群中的每个节点都是相同的)。当您在工作节点上的许多不同任务/分区中使用相同数据时,广播的目标是节省网络成本。
mapPartitions相比之下, 是 RDD 上可用的方法,并且map只在分区上工作。是的,您可以定义新对象,例如 jdbc 连接,然后这些对象对于每个分区都是唯一的。但是,您不能在不同分区之间共享它,更不用说在不同节点之间共享了。
| 归档时间: |
|
| 查看次数: |
1951 次 |
| 最近记录: |