是否可以在Spark分区器中使用广播?

时间:2018-05-25 16:38:35

标签: apache-spark

假设我有一个自定义Spark分区程序,要操作,需要一个固定的,非常大的集合,在此示例中传递给它的构造函数。 getPartition方法使用此集合返回分区号。

我正在考虑将集合包装在Broadcast变量中,并将Broadcast传递给我的自定义分区构造函数。是否可以在传递给Broadcastmap等RDD方法的典型函数之外使用filter?在这种情况下,它的行为是否明确定义?是否保证变量在工作节点JVM之间有效传输和共享?

与让Spark以标准方式捕获集合相比,它是否有任何意义或者它没有改进任何东西?

2 个答案:

答案 0 :(得分:2)

是的,可以使用Paritioner中的广播变量。但是,如果不重复使用Partitioner,广播的价值可能会很小。

无论如何,这里没有正确性问题。

答案 1 :(得分:0)

我自己也验证了这种可能性,Broadcast机制也在传递给mapfilter和其他RDD方法的函数之外工作。从日志中可以清楚地看到广播机制的工作原理,在这种情况下,Partitioner的行为符合预期。

但是,我认为这是一种矫枉过正(对于我的情况),除非广播对象在多个地方重复使用,否则无法提供帮助。