java - 在 Apache spark 中,使用 mapPartitions 和结合使用广播变量和映射有什么区别

标签 java scala apache-spark

在Spark中,我们使用广播变量让每台机器都有一个变量的只读副本。我们通常在闭包外部创建一个广播变量(例如闭包需要的查找表)以提高性能。

我们还有一个名为 mapPartitions 的 spark transformation operator,它试图实现同样的事情(Use shared variable to improve performance)。例如,在 mapPartitions 中,我们可以为每个分区共享一个数据库连接。

那么这两者有什么区别呢?我们可以将它互换地用于共享变量吗?

最佳答案

broadcast 用于将对象传送到每个工作节点。该对象将在该节点上的所有分区之间共享(并且值/即对象对于集群中的每个节点都是相同的)。当您在工作节点上的许多不同任务/分区中使用相同数据时,广播的目标是节省网络成本。

相比之下,

mapPartitions 是一种可用于 RDD 的方法,其工作方式类似于 map,但仅适用于分区。是的,您可以定义新对象,例如 jdbc 连接,然后每个分区都将是唯一的。但是,您不能在不同分区之间共享它,更不能在不同节点之间共享它。

关于java - 在 Apache spark 中,使用 mapPartitions 和结合使用广播变量和映射有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34501334/

相关文章:

java - Liquibase库在Micronaut 2.0中由于Nullpointer而失败

scala - Spark SQL为Hive构建吗?

apache-spark - 如何使用 Spark 滞后和领先分组和排序

java - 覆盖 JTextPane 中 TAB 的默认行为

java - IntelliJ 代码完成不适用于新的 Java 类

scala - Akka 持久 Actor - 函数式方法

scala - 无法访问 maxBy 返回的 Map

scala - Joda Time 类没有任何构造函数……为什么?我做错了什么?

hadoop - Apache Hadoop Yarn - 内核利用率不足

java - 将类(class)保存到 firebase