私は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
ありがとうございました。
私は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
ありがとうございました。
以下は動作します。適切な場合は、set
の代わりにtuples
とlist
を使用してください。
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)]
これが特に大きなデータセットだった場合は、 'groupBy'ではなく' mapByKey'を使うほうがよいでしょう。 –
@JoeCあなたの提案に感謝します。私は答えを更新しました –
ありがとうございました。これは完璧に動作します! –
だからあなたが探しているはずだ、明確にする{0// 2}、{1// 1}、{0/B/1} 、{1/c/2}、私の理解は正しいですか? –
はい、正しいです。 –