在Apache Spark中,使用mapPartitions和结合使用广播变量和map有什么区别?

问题描述

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

mapPartitions相反,是RDD上可用的一种方法map,仅在分区上像一样工作。是的,您可以定义新的对象,例如jdbc连接,该对象对于每个分区都是唯一的。但是,您不能在不同的分区之间共享它,在不同的节点之间共享就更少。

解决方法

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

我们还有一个名为mapPartitions的火花转换运算符,该运算符试图实现同一目的(使用共享变量来提高性能)。例如,在mapPartitions中,我们可以为每个分区共享一个数据库连接。

那么这两者有什么区别?我们可以仅将其用于共享变量吗?

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”