第13章. 高度なRDD
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
第12章では、 、単一のRDD操作の基本を探った。RDDの作成方法と、RDDを使いたくなる理由を学んだ。さらに、マッピング、フィルタリング、リデュース、単一の RDD データを変換する関数の作成方法についても説明した。この章では、高度なRDD演算子をカバーし、データを操作するための強力な抽象化であるキー・バリューRDDに焦点を当てる。また、カスタムパーティショニングのような、より高度なトピックにも触れる。カスタムパーティション分割関数を使えば、データのクラスタ上での配置を正確に制御し、それに応じて個々のパーティションを操作することができる。その前に、これから取り上げる主要なトピックをまとめておこう:
-
集約とキー・バリューRDD
-
カスタムパーティショニング
-
RDDが結合する
注
このAPIセットは、基本的にSparkの初期から存在しており、このAPIセットに関するサンプルはウェブ上に山ほどある。このため、これらの演算子の使い方を示す例を検索して発見するのは簡単だ。
前章で使ったのと同じデータセットを使ってみよう:
// in ScalavalmyCollection="Spark The Definitive Guide : Big Data Processing Made Simple".split(" ")valwords=spark.sparkContext.parallelize(myCollection,2)
# in PythonmyCollection="Spark The Definitive Guide : Big Data Processing Made Simple"\.split(" ")words=spark.sparkContext.parallelize(myCollection,2)
キー・バリューの基本(キー・バリューRDD)
RDDには、データをkey-value形式で置くことを要求するメソッドがたくさんある。これが必要であることを示すヒントは、メソッドに<some-operation>ByKey が含まれていることである。メソッド名にByKey がある場合は、PairRDD 型に対してのみ実行できることを意味する。最も簡単な方法は、現在のRDDを基本的なkey-value構造にマッピングすることである。これは、RDDの各レコードに2つの値を持つことを意味する:
// in Scalawords.map(word=>(word.toLowerCase,1))
# in Pythonwords.map(lambdaword:(word.lower(),1))
キーバイ
先ほどの例では、キーを作成する簡単な方法を示した。しかし、現在の値からキーを作成する関数を指定することで、keyBy 関数を使用して同じ結果を得ることもできる。この場合、単語の最初の文字をキーとしている。そして、SparkはそのレコードをキーとなるRDDの値として保持する:
// in Scalavalkeyword=words.keyBy(word=>word.toLowerCase.toSeq(0).toString)
# in Pythonkeyword=words.keyBy(lambda
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