2017-01-06 10 views
-1

私はSparkを初めて使用しています。私はまだいくつかのコンセプトの周りを頭で覆そうとしています。 私は、キーと値の両方のタプルがあるタプルのリストを持っています。Python Spark reduceByKeyは単一の要素には適用されません

val = [ 
    ((18, 13), (1, 1193, **5, 1**)), 
    ((18, 13), (1, 661, **3, 1**)), 
    ((9, 15), (1, 914, **3, 1**)) 
] 

値タプルでは、​​最後の2つの要素に興味があります(太字で示しています)。

タプルは共通のキー(18,13)を共有しているので、5 + 3と1 + 1を、最後のタプルは3と1の値を維持する必要があります。 、私は次の操作を行い、これを達成するために:それ以来、reduceByKey機能は、最後のタプルに適用されませんでした

[((18, 13), (8, 2)), ((9, 15), (1, 914, 3, 1))] 

parsed_data = sc.parallelize(val) 
result = parsed_data.reduceByKey(lambda x,y: (x[2]+y[2], x[3]+y[3])) 

これらreduceByKeyを適用した後、私は次のような結果を持っています減らすためのペアはありません。ただ、事前に値をマップするために、おそらくここに簡単な

[((18, 13), (8, 2)), ((9, 15), (3, 1))] 

答えて

3

されています:

parsed_data.mapValues(lambda x: (x[2], x[3])).reduceByKey(lambda x,y: (x[0]+y[0], x[1]+y[1])) 

(謝罪もし今、私は次のような出力を得るために、私はとにかくreducebyKeyを適用することができます方法を理解しようとしています構文が間違っています、私はPythonの人ではなくScalaの人です)。

関連する問題