第11章. デザインパターンに参加する
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
この章では、データセットを結合するための実用的なデザインパターンを検討する。前の章と同様、実際の環境で役立つパターンに焦点を当てる。PySparkはRDD(pyspark.RDD.join())とDataFrame(pyspark.sql.DataFrame.join())の基本的な結合操作をサポートしており、ほとんどのユースケースではこれで十分である。しかし、このjoinがコスト高になる場合もあるので、役に立つと思われる特殊化joinアルゴリズムも紹介する。
この章では、2つのデータセットを結合する基本概念を紹介し、いくつかの便利で実用的な結合デザインパターンの例を示す。結合操作がMapReduceパラダイムでどのように実装されているか、そして結合を実行するためにSparkの演算子をどのように使うかを紹介する。RDDとDataFrameを使ったマップサイド結合の実行方法と、ブルームフィルターを使った効率的な結合の実行方法を紹介する。
結合操作の紹介
リレーショナルデータベースの世界では、2つのテーブル(別名 "リレーション")を共通のキー、つまりテーブル内の各レコード(タプルまたは行)を一意に識別できる1つまたは複数の列の属性または属性セットで結合する操作は頻繁に行われる。
次の2つの表、T1 とT2 を考えてみよう:
T1 = {(k1, v1)}
T2 = {(k2, v2)}
どこだ?
-
k1はT1のキー、v1は関連する属性である。
-
k2はT2のキー、v2は関連する属性である。
単純な内部結合は、2つ以上のテーブルのキーが一致する行を結合して新しいテーブルを作成するもので、次のように定義できる:
T1.join(T2) = {(k, (v1, v2))}
T2.join(T1) = {(k, (v2, v1))}
どこだ?
-
k = k1 = k2である。
-
(k, v1)はT1にある。
-
(k, v2)はT2にある。
この仕組みを説明するために、2つのテーブルを作成し、サンプル・データを入力して、それらを結合してみよう。まず、T1 とT2 というテーブルを作成する:
>>>d1=[('a',10),('a',11),('a',12),('b',100),('b',200),('c',80)]>>>T1=spark.createDataFrame(d1,['id','v1'])>>>T1.show()+---+---+|id|v1|+---+---+|a|10||a|11||a|12||b|100||b|200||c|80|+---+---+>>>d2=[('a',40),('a',50),('b',300),('b',400),('d',90)]>>>T2=spark.createDataFrame(d2,['id','v2'])>>>T2.show()+---+---+|id|v2|+---+---+|a|40||a|50||b|300||b|400||d|90|+---+---+ ...
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