你好我經常需要在我的代碼中使用groupByKey
,但我知道這是一個非常繁重的操作。由於我正在努力提高性能,我想知道我的方法是否有效地移除所有groupByKey
調用。用spark中的reduceByKey替換groupByKey
我被用來創建從另一個RDD的RDD和創建對類型(INT,INT)
rdd1 = [(1, 2), (1, 3), (2 , 3), (2, 4), (3, 5)]
,因爲我需要獲得這樣的事情:
[(1, [2, 3]), (2 , [3, 4]), (3, [5])]
我使用的是out = rdd1.groupByKey
,但由於這種方法可能是非常大的數據集問題,我認爲使用這種解決方案:
而不是創造我對類型(INT,INT)我要做的就是創建成對類型的它的RDD rdd1
(智力,列表[INT]),所以我rdd1
成這個樣子了
rdd1 = [(1, [2]), (1, [3]), (2 , [3]), (2, [4]), (3, [5])]
但這一次達到了同樣的結果我用reduceByKey(_ ::: _)
加入所有的鍵值,這應該是更快。你認爲使用這種方法可能會提高性能嗎?我害怕這種類型(Int,List [Int])不是愚蠢的創建一個對,其中的值是一個只包含1個元素的列表?
您是否認爲使用其他方法可以更快地達到相同的結果?謝謝。
我一直想知道同樣的事情,但使用'aggregateByKey'或'combineByKey'來代替,分別使用一個空的List作爲初始化器,然後使用list.add和list.addAll作爲組合器和合並器。這將避免首先創建單元素列表。儘管如此,我相信'groupByKey'已經被優化以在這種情況下更好地工作。 – vefthym