2016-11-21 11 views
2

RDD [(K、V)]を受け入れるように指定されたreduceByKeyを認識してスパークすることを新しくしました。どのような私には明確ではないことは値がリスト/タプルであるときは、この機能を適用する方法をです...私のRDDは(Cluster:String, (Unique_ID:String, Count:Int))の形で終わっており、さまざまなマッピングおよびフィルタリング操作後指定された値要素のReduceByKey

、ここでI同じクラスタに属する多くの要素、例えばを持つことができます。

Array((a,(lkn,12)), (a,(hdha,2)), (a,(naa,35)), (b, (cdas,20)) ...) 

今はそれぞれが最高の数(クラスタごとにその一つのエントリ)を持つ要素をクラスタ化するために、検索しreduceByKeyを使用したいです。上記の例では、クラスタaの場合は(a,(naa,35))になります。

単純な(キー、値)のペアがreduceByKeymath.maxの場合、クラスタごとに最大値を見つける方法を知ることができます。しかし、値が値のリスト/タプルを表すとき、これをどのように拡張するのか分かりません。

ここで間違った機能を使用していますか?

+0

あなただけhttp://stackoverflow.com/questions/15769366/how-to-find-max-in-a-list-of-tuplesのようmaxByを使用することはできますか? – C4stor

+0

@ C4stor彼らは 'maxBy'を持たない' RDD'を使って作業しています –

答えて

3

次のことが可能です。

rdd.reduceByKey { case (x, y) => if (x._2 > y._2) x else y } 

この:

  • 論理的にキー(_._1)によって定義されたグループにデータを分割 "A" のための

    • キー:(a, [(lkn,12), (hdha,2), (naa,35), ...])
    • "b"のキー:(b, [(cdas,20), ...])
  • 値の第2の要素((x._2 > y._2))を比較することにより、各グループ内の値を減少させ、より高い数のいずれかを返します。

+0

OPは 'reduceBy'の一般的な仕組みと、lamdasをコレクションに使う方法によって混乱しているようです - あなたのコードを説明すると便利かもしれませんスニペット、またはそれがどのように動作するかを説明するリソースを提供する –

+0

@ evan058良い点。あなたは今それが良いと思いますか? –

+0

ありがとう、私は今それを得ると思います。 – nzn

関連する問題