自定义并行apache spark

时间:2016-03-13 04:38:59

标签: python apache-spark parallel-processing

我正在向the book学习。这本书有自定义并行的概念,我根本不懂。 abc和abcd有什么区别?我用abcd.collect()和abc.collect()打印它们,输出是一样的。 abcd的计算速度更快吗?

data = [("a", 3), ("b", 4), ("a", 1)]
abc=sc.parallelize(data).reduceByKey(lambda x, y: x + y)      # Default parallelism
abcd=sc.parallelize(data).reduceByKey(lambda x, y: x + y, 10)  # Custom parallelism

1 个答案:

答案 0 :(得分:0)

collect之后的结果应该相同。是否更快取决于。第一种形式,即

abc = sc.parallelize(data).reduceByKey(lambda x, y: x + y)

将生成一个结果,该结果的分区方式与data相同(如果dataPartitioner),或者默认为HashPartition分区等于defaultParallelism(或类似的东西。)

第二种形式,即

abcd=sc.parallelize(data).reduceByKey(lambda x, y: x + y, 10)

你告诉Spark使用带有10个分区的HashPartitioner。因此,第二种形式可以让您明确控制聚合中使用的并行度(或使您能够更改它)。

如果你有很多密钥,那么分散更多东西(更多分区)的工作可能是个好主意,特别是如果你的聚合(每个密钥)很大,这可以减少通信瓶颈大集群。