我正在向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
答案 0 :(得分:0)
collect
之后的结果应该相同。是否更快取决于。第一种形式,即
abc = sc.parallelize(data).reduceByKey(lambda x, y: x + y)
将生成一个结果,该结果的分区方式与data
相同(如果data
有Partitioner
),或者默认为HashPartition
分区等于defaultParallelism
(或类似的东西。)
第二种形式,即
abcd=sc.parallelize(data).reduceByKey(lambda x, y: x + y, 10)
你告诉Spark使用带有10个分区的HashPartitioner
。因此,第二种形式可以让您明确控制聚合中使用的并行度(或使您能够更改它)。
如果你有很多密钥,那么分散更多东西(更多分区)的工作可能是个好主意,特别是如果你的聚合(每个密钥)很大,这可以减少通信瓶颈大集群。