PySparkでは、大規模データの処理や解析を効率的に行うために、データフレームの結合操作が非常に重要です。この記事では、データフレームを結合するための2つの基本的な操作、union
とjoin
について詳しく解説します。
目次
1. Union操作
union
は、複数のデータフレームを垂直に結合する操作です。つまり、行を追加する形でデータフレームを結合します。ただし、結合するデータフレームのスキーマ(カラム名とその型)が一致している必要があります。
Unionの基本的な使い方
まず、サンプルデータフレームを作成します。
from pyspark.sql import SparkSession
# Sparkセッションの作成
spark = SparkSession.builder.appName("UnionExample").getOrCreate()
# サンプルデータ
data1 = [("Alice", 34), ("Bob", 45)]
columns = ["Name", "Age"]
# データフレームの作成
df1 = spark.createDataFrame(data1, schema=columns)
data2 = [("Cathy", 29), ("David", 40)]
df2 = spark.createDataFrame(data2, schema=columns)
# データフレームの表示
df1.show()
df2.show()
+-----+---+
| Name|Age|
+-----+---+
|Alice| 34|
| Bob| 45|
+-----+---+
+-----+---+
| Name|Age|
+-----+---+
|Cathy| 29|
|David| 40|
+-----+---+
Unionの実行
次に、union
を使ってデータフレームを結合します。
# データフレームの結合
union_df = df1.union(df2)
# 結合結果の表示
union_df.show()
+-----+---+
| Name|Age|
+-----+---+
|Alice| 34|
| Bob| 45|
|Cathy| 29|
|David| 40|
+-----+---+
2. Join操作
join
は、複数のデータフレームを水平に結合する操作です。つまり、共通のカラムに基づいてデータフレームを結合し、新しいカラムを追加する形で結合します。PySparkでは、様々な種類のjoin
をサポートしていますが、ここでは代表的なものを紹介します。
Inner Join
共通のカラムに一致する行のみを結合するのがinner join
です。
# サンプルデータ
data1 = [("Alice", 34), ("Bob", 45)]
columns1 = ["Name", "Age"]
# データフレームの作成
df1 = spark.createDataFrame(data1, schema=columns1)
data2 = [("Alice", "F"), ("Bob", "M"), ("Cathy", "F")]
columns2 = ["Name", "Gender"]
df2 = spark.createDataFrame(data2, schema=columns2)
# Inner Joinの実行
inner_join_df = df1.join(df2, on="Name", how="inner")
# 結合結果の表示
inner_join_df.show()
+-----+---+------+
| Name|Age|Gender|
+-----+---+------+
|Alice| 34| F|
| Bob| 45| M|
+-----+---+------+
Left Join
左側のデータフレームのすべての行を保持し、共通のカラムに一致する右側のデータフレームの行を結合するのがleft join
です。
# Left Joinの実行
left_join_df = df1.join(df2, on="Name", how="left")
# 結合結果の表示
left_join_df.show()
+-----+---+------+
| Name|Age|Gender|
+-----+---+------+
|Alice| 34| F|
| Bob| 45| M|
+-----+---+------+
Right Join
右側のデータフレームのすべての行を保持し、共通のカラムに一致する左側のデータフレームの行を結合するのがright join
です。
# Right Joinの実行
right_join_df = df1.join(df2, on="Name", how="right")
# 結合結果の表示
right_join_df.show()
+-----+----+------+
| Name| Age|Gender|
+-----+----+------+
|Alice| 34| F|
| Bob| 45| M|
|Cathy|null| F|
+-----+----+------+
Full Outer Join
両方のデータフレームのすべての行を保持し、共通のカラムに一致する行を結合するのがfull outer join
です。
# Full Outer Joinの実行
full_outer_join_df = df1.join(df2, on="Name", how="outer")
# 結合結果の表示
full_outer_join_df.show()
+-----+----+------+
| Name| Age|Gender|
+-----+----+------+
|Alice| 34| F|
| Bob| 45| M|
|Cathy|null| F|
|David| 40| null|
+-----+----+------+
まとめ
この記事では、PySparkにおけるunion
とjoin
の基本的な使い方を紹介しました。union
はデータフレームを垂直に結合し、join
は水平に結合するために使用されます。これらの操作を理解することで、より柔軟にデータを操作し、複雑なデータ分析を行うことが可能になります。