PrithvirajBoseによる寄稿
Javaでオブジェクト配列を作成する方法
Sparkは、迅速な計算と専門家の需要のために設計された超高速のクラスターコンピューティングフレームワークです。 今日の市場ではかなりのものです。これがSparkの強力なAPIです。 CombineByKey 。
APIスケール: org.apache.spark.PairRDDFunctions.combineByKey 。
Python API: pyspark.RDD.combineByKey 。
APIは3つの関数を取ります( ラムダ式 に Python または 匿名関数 に はしご )、すなわち、
- コンバイナー関数の作成:x
- 値のマージ関数:y
- コンバイナー関数のマージ:z
APIフォーマットは CombineByKey(x、y、z) 。
例を見てみましょう(Scalaで)。完全なScalaソースが見つかります ここに 。
私たちの目的は、学生一人当たりの平均スコアを見つけることです。
これがプレースホルダークラスです ScoreDetail 科目のスコアとともに学生の名前を保存します。
一部のテストデータが生成され、キーペア値に変換されます。 キー=学生の名前 そして 値= 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)として計算します。
最後の行には、運転席側のすべての学生の平均スコアが印刷されています。
質問がありますか?コメントセクションでそれらに言及してください。折り返しご連絡いたします。
関連記事: