在python Spark中组合2个RDD
我有两个RDD。假设rdd1={'a','b','c','a','c','a'}和rdd2是KMeans的一个输出,其集群分配如下->rdd2={0,0,1,1,0}。我想最终找出集群0和1中有多少个a和b。例如,0有两个a,所以类似于{0,a,2}等。有没有一种方法可以组合这两个rdd来执行这样的操作在python Spark中组合2个RDD,python,apache-spark,pyspark,rdd,k-means,Python,Apache Spark,Pyspark,Rdd,K Means,我有两个RDD。假设rdd1={'a','b','c','a','c','a'}和rdd2是KMeans的一个输出,其集群分配如下->rdd2={0,0,1,1,0}。我想最终找出集群0和1中有多少个a和b。例如,0有两个a,所以类似于{0,a,2}等。有没有一种方法可以组合这两个rdd来执行这样的操作 谢谢你的帮助。下面的方法很有效。在适当的情况下,使用元组和列表而不是设置 rdd1 = sc.parallelize(['a','b','c', 'a', 'c', 'a']) rdd2 = s
谢谢你的帮助。下面的方法很有效。在适当的情况下,使用
元组
和列表
而不是设置
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)]
因此,为了澄清,您需要寻找{0/a/2}、{1/a/1}、{0/b/1}、{1/c/2},我的理解正确吗?是的,这是正确的。如果这是一个特别大的数据集,您最好使用
reduceByKey
而不是groupBy
然后是map
@JoeC谢谢您的建议。我已经更新了答案非常感谢您的建议@JoeC。