2017-02-04 78 views
0

我有2個RDD。假設rdd1 = {'a','b','c','a','c','a'}並且rdd2是具有如下集羣分配的KMeans的輸出 - > rdd2 = {0,0,1 ,1,1,0}。我想最終找出羣集0和1中有多少個a和b。例如,0有2個,就像{0,a,2}等等。有沒有一種方法可以將這2個RDDS合併爲一個這樣的操作?在python中組合2個RDD Spark

感謝您的幫助。

+0

所以爲了澄清,你會尋找{0/A/2},{1/A/1},{0/B/1} ,{1/c/2},我的理解是否正確? –

+0

是的,這是正確的。 –

回答

0

下面的工作。在適當的地方使用tupleslist而不是set

rdd1 = sc.parallelize(['a','b','c', 'a', 'c', 'a']) 
rdd2 = sc.parallelize([0, 0, 1, 1, 1, 0]) 
rdd = rdd1.zip(rdd2).map(lambda x: (x,1)).reduceByKey(lambda x,y: x+y).map(lambda ((x1,x2),y): (x1,x2,y)) 
rdd.collect() 

輸出:

[('a', 0, 2), ('b', 0, 1), ('c', 1, 2), ('a', 1, 1)] 
+1

如果這是一個特別大的數據集,那麼最好使用'reduceByKey'而不是'groupBy',後跟'map'。 –

+0

@JoeC感謝您的建議。我已經更新了答案 –

+0

非常感謝你@流氓-1。這工作完美! –