我有一个RDD[(DenseVector[Int], String)]
,DenseVector是Breeze中使用的一个集合,我会在我的代码段中将其称为DV
。让我们使用一个简单的moon = [(DV(4), "Tinker"), (DV(2), "Tailor"), (DV(4), "Soldier"), (DV(2), "Sailor"), (DV(2), "Poor Man"), (4), "Rich Man")]
。我在本地使用moon.groupByKey()
按键对其进行分组,然后将其保存为文本文件,结果为:
(DV(4), CompactBuffer("Tinker", "Soldier", "Rich Man")), (DV(2), CompactBuffer("Tailor", "Sailor", "Poor Man"))
然后我使用相同的代码,但使用由两个从属组成的Spark群集,而不是local
。结果由两个文件组成,部分为00000:
(DV(4), CompactBuffer("Tinker")), (DV(2), CompactBuffer("Tailor")), (DV(4), CompactBuffer("Soldier")),
部分00001:
(DV(2), CompactBuffer("Sailor")), (DV(2), CompactBuffer("Poor Man")), (DV(4), CompactBuffer("Rich Man"))
有没有理由解释这种行为,为什么groupByKey()
在群集中使用它时无法按键分组?我使用的是Spark 2.0.0。