在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/