第4章. スパークの削減
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
この章では、SparkにおけるRDDの削減変換に焦点を当てる。特に(key, value)ペアのRDDを扱うが、これはSparkの多くの演算子で必要とされる一般的なデータの抽象化である。データを(key, value)の形にするために、いくつかの初期ETL操作が必要になるかもしれないが、ペアRDDを使えば、値のセットに対して任意の集計を行うことができる。
Sparkはいくつかの強力な削減変換とアクションをサポートしている。最も重要なリダクション変換は以下の通りだ:
-
reduceByKey() -
combineByKey() -
groupByKey() -
aggregateByKey()
すべての*ByKey() 変換は、ソースRDD[(K, V)] を受け入れ、ターゲットRDD[(K, C)] を作成する(reduceByKey() 、V 、Cなどの一部の変換は同じである)。これらの変換の機能は、与えられたキーのすべての関数を(すべての一意なキーに対して)削減することである:
-
すべての値の平均
-
すべての値の合計とカウント
-
すべての値のモードと中央値
-
すべての値の標準偏差
リダクション・トランスフォームの選択
マッパーの変換と同様に、作業に適したツールを選択することが重要だ。いくつかの削減演算子(中央値の発見など)は、同時にすべての値にアクセスする必要がある。すべての値の合計やカウントを発見するような他の操作では、それは必要ない。キーごとの値の中央値を発見したいのであれば、groupByKey()。しかし、この変換は、キーにたくさんの値がある場合にはうまくいかない(OOM問題が発生する可能性がある)。一方、すべての値の合計やカウントを発見したい場合は、reduceByKey() が良い選択かもしれない。 は、連想・可換のリデュース関数を使用して、各キーの値を結合する。
この章では、最も重要なSparkの削減変換の使い方を、簡単なPySparkの例を通して紹介する。Sparkアプリケーションで最もよく使われる変換に焦点を当てる。また、一般的な削減の概念や、効率的な削減アルゴリズムの設計原則としてのモノイドについても説明する。Sparkの削減変換で必要となるペアRDDの作成方法から始める。
ペアRDDの作成
キーとそれに関連する値のセットが与えられた場合、削減変換はアルゴリズム (値の合計、値の中央値など)を使用して各キーの値を削減する。 本章で紹介する削減変換は、このように(キー、値)のペアで動作するため、RDD要素はこの形式に準拠しなければならない。 SparkでペアRDDを作成する方法はいくつかある。例えば、ここに示すように、コレクション(タプルのリストや辞書など)に対してparallelize() :
>>>key_value=[('A',2),('A',4),('B',5),('B',7)]>>>pair_rdd=spark.sparkContext.parallelize(key_value)>>>pair_rdd.collect()[('A',2),('A',4),('B',5),('B',7)]>> ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access