2017-03-25 14 views
0

私はRDD [Int]を持っていると言います。私がある弁別器の機能によってグループをやると、私はRDD [Int(Iterable [Int])]を残します。apache-sparkでIterableを処理する

このIterableは大きくなる可能性があるため、ノード間で分散する必要があります。しかし、RDDのようにそれを処理する手段はありません。

たとえば、Iterablesの1つを使用してさらにいくつかのペアリングとキーによる集約を行いたい場合は、

または私はそれらのいずれかを並べ替えると、私は定期的なScalaのコレクションが配布されていないので、ここに.toListまたは.toSeqの方法のいずれかを呼び出すために法的ではないと仮定しmedian

を見つけたいと言うことができます。

したがって、Iterablesを扱うための正しいアプローチは何ですか?

答えて

0

あなたはaggregateByKeyまたはreduceByKey transformations、あなたはあなたがほぼ確実groupByを行うにはしたくないコレクト

1

ようactionsを使用することができ、結果を取るために使用することができます。 Sparkのジョブで最も大きなパフォーマンス上の問題の1つは、パーティション化とデータの局所性が低いため、クラスタの周りのデータを入れ替えることです。 groupByを実行している場合は、おそらくデータをそのキーに分割し、データを可能な限り互いに接近させたいと考えています。したがって、最終的にgroupByは実際にはではありませんあなたがそれを避けることができれば、あなたのデータをパーティションから分散したいと思っています。

しかし、あなたはがほしいと思っています。より多くのものを配布する必要があります。

val rdd: RDD[Int] = ... 
val rdd2: RDD[(Int, Int)] = rdd.map(i => (key(i), i)) 
val rdd3: RDD[(Int, Int)] = rdd2.reduceByKey((accumulator, i) => myFunction(accumulator, i)) 
+0

あなたは正しいですが、groupByに問題がありますが、Iterableを取得する他の方法があります。たとえば、groupByKey。私の疑問は、イテラブルをどう対処するのかではなく、避ける方法でした。私の使用例の1つは、反復可能[Int]の中央値を見つけることです。 – George

+1

いいえ、 'groupBy'"に問題があります。 "スパークAPIを根本的に誤解しているだけです。また、 'Iterable'"ユースケース "は、あなたの「groupBy」に対する執念の関数としてのみ存在します。 Spark APIに問題があり、思考プロセスではないことが確かなので、少なくともIterableでの操作は問題であることを確認してください。 SparkがGradient-Boosted Treesと潜在的なDirichletの割り当てでいくつかの機械学習を行うことができるなら、私はかなり中央値を計算できると確信しています。 – Vidya

関連する問題