2016-08-23 17 views
0

SparkのreduceByKey/groupByKey関数の使用に問題があります。Spark reducebykey - 要素の最小リスト

Iフォーム(datetime, [a1, b1, c1, d1]), (datetime, [a2, b2, c2, d2]) ...

一対のRDD Iを有するグループにキー(ここでは同じ日時)によってそれらの要素を、要素ごとの最小値のリストに対応する出力値を取得したいです。私の例では

出力は次のようになります。

(datetime, [min(a1,a2), min(b1,b2), min(c1,c2), min(d1,d2)])

私が試してみた:

reduceByKey(lambda (a, b): [min(x) for x in zip(a, b)]) 

が、失敗したこれまでのところ。

ありがとうございます。

+0

あなたの試みは一見OKに見えます。 _unsuccessfully_とはどういう意味ですか? – zero323

+0

上記を試したときに 'TypeError:()が正確に1引数(2与えられた)'エラーを返しました。ラムダオブジェクト(a、b)のかっこを取り除いて動作しているように思えますが、なぜか理解できないようです...とにかくありがとう! – PMarshall

+0

ああ、括弧が欠けていました。 'lambda a、b:zip(a、b)のxに対して[min(x)] 'を使ってください。 – zero323

答えて

-1

この問題については、簡単な解決策があります。

あなたのマップ機能では、減らす前に。

(datetime, ([a1, b1, c1, d1],)) 

タプルの中にコンマを挿入することに注意してください。これは私が "開いた"タプルをしています。そして、それのように、あなたは行うことができますあなたのreduceByKeyデフォルトとして:

reduceByKey(lambda a, b: a + b) 

、あなたはこのようなRDDを取得します:

(datetime, ([a1, b1, c1, d1], [a2, b2, c2, d2])) 
+0

これは本当に問題を解決していません。 OPは、グループ化されていない要素の賢明な最小を望む。そして、全体の問題はparamsの定義のようです。 – zero323

関連する問題