2017-02-04 55 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。这工作完美! –