
2.4
変換
27
2.4.6
.leftOuterJoin(...)
変換
.leftOuterJoin(...)
は、SQL の世界の場合と同じく2 つのRDDをどちらのデータセットにも表
れる値に基づいて結合し、2つの RDD がマッチする場合に左側の RDD のレコードに右側のレコードを
付け足して返します。
rdd1 = sc.parallelize([('a', 1), ('b', 4), ('c',10)])
rdd2 = sc.parallelize([('a', 4), ('a', 1), ('b', '6'), ('d', 15)])
rdd3 = rdd1.leftOuterJoin(rdd2)
rdd3
で
.collect(...)
を実行すれば、次の結果が出力されるでしょう。
このメソッドもまた負荷の高いメソッドであり、データをシャッフルすることからパフォーマ
ンスに大きく影響します。本当な場合にのみ慎重に使うようにしてください。
ここで返されているのは、RDDの
rdd1
のすべての要素と、RDDの
rdd2
でそれらに対応する値で
す。見て取れるとおり、
'a'
という値は
rdd3
では 2回現れていますが、
rdd2
でも2回現れています。
b
という値は
rdd1
に一度だけ登場し、
rdd2
の
'6'
という値と結合されています。消えている値も 2つあ
ります。
rdd1
の
'c'
という値は、対応するキーが
rdd2
にないので、返されたタプルの中の値は
None
になっており、ここで行っているのは左外部結合なの ...