rddの2つの浮動小数点型のキー付きタプルを、リストにキー付きタプルのリストと各キーのそれぞれの数に組み合わせるのが難しかった。私はrddを使用しています。これを行うにはcombineByKeyを使用します。 combineByKeyの外側にある3つのラムダに値を渡すと、私が期待する結果、タプルとカウントのリストのキーとタプルが得られます。しかし、私がcombineByKeyでこれを行うと、私は1つの定数値とカウントのリストのキーとタプルを取得します。私はここで何が欠けていますか?私は説明するために以下のREPL出力をキャプチャしました。Pyspark combineByKeyタプルとカウントのリスト
j = jnd.take(2)
j
:
[[u'14225532965000', (0.2072, 82777.0)], [u'14217732824000', (0.20361902000000001, 77271.0)]]
creCmb = (lambda v: ([v[1]], 1))
mrgVal = (lambda x, v: (x[0]+[v[1]], x[1]+1))
mrgCmb = (lambda x, y: (x[0]+y[0], x[1]+y[1]))
x = creCmb(j[0])
x
:
([(0.2072, 82777.0)], 1)
m = mrgVal(x, j[1])
m
:
([(0.2072, 82777.0), (0.20361902000000001, 77271.0)], 2)
r = mrgCmb(m, m)
r
:
([(0.2072, 82777.0), (0.20361902000000001, 77271.0), (0.2072, 82777.0), (0.20361902000000001, 77271.0)], 4)
cmb = jnd.combineByKey(creCmb, mrgVal, mrgCmb)
cmb.count()
4513
cmb.take(1)
[(u'14225532026000', ([56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, ...
... 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0, 56917.0], 741))]
私はcreCmbからインデックスを削除し、そしてまたmrgVal、それは同じ問題を持っているでしょう。私は今2つの倍数と1つのカウントのタプルのリストを取得しますが、2つの2つのタプルはすべて同じです。 [(u'14225532026000 '、([(0.1901883299999999999,56917.0)、(0.1901883299999999999、56917.0)、...(0.19018832999999999,56917.0)、(0.19018832999999999、56917.0)]、741))] – dmbaker
@dmbaker奇妙なことに、私。私はあなたのコードを貼り付け、 '[1]'を 'creCmb'と' mrgVal'から取り除いたので、 '' lambda v:([v]、1) ''、 'λx、v:(x x [0] + [v]、x [1] +1) '、'λx、y:(x [0] + y [0]、x [1] + y [1]) '。私は無作為に選ばれた10000のテスト要素を持つ私の会社のクラスタでそれを走らせ、タプルはすべて異なっていました。私は何が起こっているのか分からない - あなたのデータについて何か不思議なことはありますか? –
あなたのソリューションは素晴らしい仕事をしました。ラムダを修正した後、私は自分のデータロジックに問題を見つけることができました。ありがとうございました。 – dmbaker