PySparkデータフレーム操作の基本(UnionとJoin編)

PySparkでは、大規模データの処理や解析を効率的に行うために、データフレームの結合操作が非常に重要です。この記事では、データフレームを結合するための2つの基本的な操作、unionjoinについて詳しく解説します。

目次

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におけるunionjoinの基本的な使い方を紹介しました。unionはデータフレームを垂直に結合し、joinは水平に結合するために使用されます。これらの操作を理解することで、より柔軟にデータを操作し、複雑なデータ分析を行うことが可能になります。

よかったらシェアしてね!
目次
閉じる