pysparkを使用すると、次のようなRDDがあります。
[("a", 0), ("b", 1), ("a", 1), ("a", 0)]
私がやりたいのは、3番目のフィールドに基づいた最初のフィールドのカウントを使用して別のRDDを構築することです。効果的には次のようになります。
[("a", 0, 2), ("a", 1, 1), ("b", 1, 1)]
つまり、3番目のフィールドが0の「a」のインスタンスが2つあり、3番目のフィールドが1の「a」のインスタンスが1つあり、3番目のフィールドが1の「b」のインスタンスが1つあります。
reduceByKeyを使用すると、最初のフィールドのさまざまなカウントを簡単に取得できます。
rdd = sc.parallelize([( "a"、0、2)、( "a"、1、1)、( "b"、1、1)])
.map(lambda row:(row [0]、1))
.reduceByKey(add)
しかし、これでは、3番目のフィールドに関係なく、「a」と「b」のカウントしか得られません。代わりにこれを取得するにはどうすればよいですか?
あなたの質問をよく理解しているなら、あなたはおそらくこのようなものを探しています:
from operator import add
rdd = sc.parallelize([("a", 0), ("b", 1), ("a", 1), ("a", 0)])
.map(lambda row: ((row[0],row[1]), 1))
.reduceByKey(add)
.map(lambda row : (row[0][0],row[0][1],row[1]))
print(rdd.collect())
# [('a', 1, 1), ('a', 0, 2), ('b', 1, 1)]
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加