我有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},我的理解是否正確? –
是的,這是正確的。 –