我有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
感谢您的帮助。
我有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
感谢您的帮助。
下面的工作。在适当的地方使用tuples
和list
而不是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)]
如果这是一个特别大的数据集,那么最好使用'reduceByKey'而不是'groupBy',后跟'map'。 –
@JoeC感谢您的建议。我已经更新了答案 –
非常感谢你@流氓-1。这工作完美! –
所以为了澄清,你会寻找{0/A/2},{1/A/1},{0/B/1} ,{1/c/2},我的理解是否正确? –
是的,这是正确的。 –