ApacheSparkのcombineByKeyの説明



このSparkHadoopブログでは、Apache SparkcombineByKeyについて知っておく必要があるすべてのことを説明しています。 CombineByKeyメソッドを使用して、学生ごとの平均スコアを見つけます。

PrithvirajBoseによる寄稿

Javaでオブジェクト配列を作成する方法

Sparkは、迅速な計算と専門家の需要のために設計された超高速のクラスターコンピューティングフレームワークです。 今日の市場ではかなりのものです。これがSparkの強力なAPIです。 CombineByKey





APIスケール: org.apache.spark.PairRDDFunctions.combineByKey

Python API: pyspark.RDD.combineByKey



APIは3つの関数を取ります( ラムダ式Python または 匿名関数はしご )、すなわち、

  1. コンバイナー関数の作成:x
  2. 値のマージ関数:y
  3. コンバイナー関数のマージ:z

APIフォーマットは CombineByKey(x、y、z)

例を見てみましょう(Scalaで)。完全なScalaソースが見つかります ここに



私たちの目的は、学生一人当たりの平均スコアを見つけることです。

これがプレースホルダークラスです ScoreDetail 科目のスコアとともに学生の名前を保存します。

Scoredetail-spark-combinebykey

一部のテストデータが生成され、キーペア値に変換されます。 キー=学生の名前 そして 値= ScoreDetail インスタンス。

次に、以下のコードフラグメントに示すように、ペアRDDを作成します。実験のために、サイズ3のハッシュパーティショナーを作成したので、3つのパーティションにはそれぞれ2、2、4のキーと値のペアが含まれます。これは、各パーティションについて説明するセクションで強調表示されています。

これで、各パーティションを調べることができます。 1行目は各パーティションの長さ(パーティションごとのキーと値のペアの数)を出力し、2行目は各パーティションの内容を出力します。

そして、これがフィナーレの動きです。パーティション全体のスコアを組み合わせた後、生徒1人あたりの平均スコアを計算します。

上記のコードフローは次のとおりです…
まず、各パーティションで検出されたすべてのキーに対して、基本的にタプル=(値、1)であるコンバイナー関数を作成する必要があります。このフェーズの後、パーティション内のすべての(key、value)の出力は(key、(value、1))になります。

次に、次の反復で、パーティションごとのコンバイナー関数が、すべてのキーの値のマージ関数を使用してマージされます。このフェーズの後、すべての(key、(value、1))の出力はすべてのパーティションの(key、(total、count))になります。

最後に、マージコンバイナー関数は、エグゼキューター内のパーティション全体のすべての値をマージし、データをドライバーに送り返します。このフェーズの後、パーティションごとのすべての(key、(total、count))の出力は次のようになります。
(キー、(totalAcrossAllPartitions、countAcrossAllPartitions))。

マップは変換します
(キー、タプル)=(キー、(totalAcrossAllPartitions、countAcrossAllPartitions))
キーごとの平均を(key、tuple._1 / tuple._2)として計算します。

最後の行には、運転席側のすべての学生の平均スコアが印刷されています。

質問がありますか?コメントセクションでそれらに言及してください。折り返しご連絡いたします。

関連記事:

Sparkでのパーティショニングの謎を解き明かす