2017-02-04 9 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には{0、a、2}のような2 aのようなものがあります。操作?Pythonで2つのRDDを結合するSpark

ありがとうございました。

+0

だからあなたが探しているはずだ、明確にする{0// 2}、{1// 1}、{0/B/1} 、{1/c/2}、私の理解は正しいですか? –

+0

はい、正しいです。 –

答えて

0

以下は動作します。適切な場合は、setの代わりにtupleslistを使用してください。

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

これが特に大きなデータセットだった場合は、 'groupBy'ではなく' mapByKey'を使うほうがよいでしょう。 –

+0

@JoeCあなたの提案に感謝します。私は答えを更新しました –

+0

ありがとうございました。これは完璧に動作します! –

関連する問題