マップを適用してから、pysparkを使用してRDDでreduceByKey変換を行います。私は、次の構文の両方を試みたが、それらの両方が動作するようです:pyspark:reducedByKeyの対表現のための(、)と[、]の使用の違い
ケース1:
my_rdd_out = my_rdd.map(lambda r: [r['my_id'], [[r['my_value']]]])\
.reduceByKey(lambda a, b: a+b)\
.map(lambda r: r[1])
ケース2:
my_rdd_out = my_rdd.map(lambda r: (r['my_id'], [[r['my_value']]]))\
.reduceByKey(lambda a, b: a+b)\
.map(lambda r: r[1])
ここでrはクラスfrom pyspark.sql import Row
です。 ケース1の場合、マップ出力ペアは括弧で囲まれています。ケース2の場合、マップ出力ペアはかっこ内にあります。どちらの作品も、後でreduceByKeyの入力となるペアを表すために[]と()を使用することに違いがあるのでしょうか?ありがとう!
reduceByKeyはreduceByKeyを実行する前に実際にリストをタプルにキャストしますか?どの形式がより形式的/標準的ですか?ありがとう! – Edamame
私の編集を参照してください(そのために編集が必要でした)。キャストはありません。利便性に応じてフォーマットを選択してください。関数を呼び出すためにのみ作成されたタプル/リストの場合は、選択が難しいですが、私は同意します。 –
こんにちはジャンフランソワ、詳細情報をありがとうございます。 def reduceByKey(func、iterable)の実装を理解しようとしています。私の例では、関数funcとiterableが必要です:reduceByKey(lambda a、b:a + b)?どうもありがとう! – Edamame