PySparkデータフレーム操作の基本(単独のdata frame編)

PySparkは、Apache SparkをPythonで利用できるようにしたライブラリで、大規模データの処理や解析に非常に強力です。この記事では、PySparkのデータフレーム操作の基本について解説していきます。

目次

1. データフレームの作成

まず、PySparkのデータフレームを作成する方法を紹介します。以下の例では、リストからデータフレームを作成します。

from pyspark.sql import SparkSession

# Sparkセッションの作成
spark = SparkSession.builder.appName("DataFrameExample").getOrCreate()

# データの準備
data = [("Alice", 34), ("Bob", 45), ("Cathy", 29)]

# スキーマの定義
columns = ["Name", "Age"]

# データフレームの作成
df = spark.createDataFrame(data, schema=columns)

# データフレームの表示
df.show()
+-----+---+
| Name|Age|
+-----+---+
|Alice| 34|
|  Bob| 45|
|Cathy| 29|
+-----+---+

2. カラムの選択(select)

# 特定のカラムを選択
df.select("Name").show()

# 複数のカラムを選択
df.select("Name", "Age").show()
+-----+
| Name|
+-----+
|Alice|
|  Bob|
|Cathy|
+-----+
+-----+---+
| Name|Age|
+-----+---+
|Alice| 34|
|  Bob| 45|
|Cathy| 29|
+-----+---+

3. データ(レコード)の抽出(where)

データフレームから条件に合う行だけを抽出するフィルタリングの方法です。

# Ageが30以上の行をフィルタリング
df.filter(df.Age >= 30).show()
+-----+---+
| Name|Age|
+-----+---+
|Alice| 34|
|  Bob| 45|
+-----+---+

4. 新しいカラムの追加(alter table add column)

既存のデータフレームに新しいカラムを追加する方法です。

from pyspark.sql.functions import col

# 年齢を2倍にした新しいカラムを追加
df = df.withColumn("DoubleAge", col("Age") * 2)
df.show()
+-----+---+---------+
| Name|Age|DoubleAge|
+-----+---+---------+
|Alice| 34|       68|
|  Bob| 45|       90|
|Cathy| 29|       58|
+-----+---+---------+

5. カラムの名前変更(alter table alter column)

# カラム名を変更
df = df.withColumnRenamed("DoubleAge", "AgeDoubled")
df.show()
+-----+---+----------+
| Name|Age|AgeDoubled|
+-----+---+----------+
|Alice| 34|        68|
|  Bob| 45|        90|
|Cathy| 29|        58|
+-----+---+----------+

6. グループ化と集計(group by)

データをグループ化し、集計する方法を紹介します。まずは、新しくサンプルデータを準備します。

# サンプルデータ
data = [("Alice", "Math", 85), ("Alice", "Science", 92),
        ("Bob", "Math", 78), ("Bob", "Science", 83),
        ("Cathy", "Math", 95), ("Cathy", "Science", 89)]
columns = ["Name", "Subject", "Score"]

# データフレームの作成
df = spark.createDataFrame(data, schema=columns)

# データフレームの表示
df.show()
+-----+-------+-----+
| Name|Subject|Score|
+-----+-------+-----+
|Alice|   Math|   85|
|Alice|Science|   92|
|  Bob|   Math|   78|
|  Bob|Science|   83|
|Cathy|   Math|   95|
|Cathy|Science|   89|
+-----+-------+-----+

名前ごとにスコアの平均を計算します。

# 名前ごとにグループ化し、スコアの平均を計算
df.groupBy("Name").avg("Score").show()
+-----+----------+
| Name|avg(Score)|
+-----+----------+
|Alice|      88.5|
|  Bob|      80.5|
|Cathy|      92.0|
+-----+----------+

まとめ

PySparkのデータフレーム操作の基本を紹介しました。これらの基本操作を習得することで、大規模データの処理や分析がより効率的に行えるようになります。次回はさらに高度な操作や実践的な例についても紹介していきます。

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