こんにちわ、クラウドデータ研究所です。
前回の記事「PySpark超概要」では、PySparkがどのように大規模データを効率的に処理するかをざっくり説明しました。
今回はその中でも実務でよく使われる PySpark SQL に焦点をあてていきます。SQLに慣れている人なら直感的に扱えるため、データ分析やETL処理の現場で非常に重宝される仕組みです。ここでは、PySpark SQLとは何か、基本的な使い方、活用例を見ていきましょう!
Table of Contents
PySpark SQLとは?
PySpark SQLは、Spark上でSQLライクにデータ操作を行うためのモジュールです。通常のSpark DataFrame APIに加えて、SQL文を直接発行してデータを抽出・集計できるのが大きな特徴です。
- SQL経験者にとって学びやすい
既存のSQL文法(SELECT, WHERE, GROUP BY, JOINなど)をそのまま利用可能。 - 分散処理を意識しなくてよい
巨大データであってもSQLを書く感覚で処理を実行できる。 - データベース連携も容易
RDBやParquet、CSVなど、さまざまなデータソースに対応。
PySpark SQLを使う準備
PySpark SQLを利用するには、まずDataFrameを一時ビュー(一時テーブル)として登録します。
# DataFrameを一時ビューとして登録
df.createOrReplaceTempView("sales")
# SQL文を発行
result = spark.sql("""
SELECT product, SUM(amount) AS total_amount
FROM sales
GROUP BY product
""")
result.show()
ポイントは、createOrReplaceTempView
で一時ビューを作ること。これにより、PythonコードとSQLの両方から同じデータを操作できます。
よく使うSQL構文とPySparkでの実行例
SELECTとWHERE
SELECT name, age
FROM people
WHERE age > 30
GROUP BYと集計
SELECT country, COUNT(*) AS cnt
FROM customers
GROUP BY country
JOIN
SELECT a.id, a.value1, b.value2
FROM df1 a
INNER JOIN df2 b
ON a.id = b.id
いずれもSQL文をそのまま書けるため、データベース経験者なら直感的に理解できます。
DataFrame APIとの比較
PySparkでは同じ処理を DataFrame API でも書けます。
例:国ごとの件数を集計
df.groupBy("country").count()
同じ処理をSQLで書くと:
SELECT country, COUNT(*)
FROM customers
GROUP BY country
どちらを使っても良いですが、
- Python的に柔軟な処理を組みたい → DataFrame API
- 既存SQLスキルを活かしたい/読みやすさ重視 → SQL文
と使い分けるのが一般的です。
実務での利用シーン
PySpark SQLは、現場で次のようなシーンで活用されています。
- データレイクの分析
Data Lake上のParquetやORCファイルをSQLで一気に分析。 - ログ集計
アクセスログやトランザクションログをSQLでグルーピングして傾向分析。 - ETL処理の一部として
異なるデータソースをJOINして加工し、次の処理に渡す。 - 機械学習の前処理
SQLを使って特徴量を抽出したり欠損値を処理したりする。
これらはすべて「SQLで書ける」という直感性が効いています。
PySpark SQLをさらに深める
PySpark SQLには基本的なSQLだけでなく、以下のような機能も備わっています。
- UDF(ユーザー定義関数)
Pythonで関数を定義してSQLから呼び出せる。 - Window関数
SQLの分析関数(RANK, ROW_NUMBER, LAGなど)を利用可能。 - キャッシュと最適化
cacheTable
や Catalyst Optimizer により処理効率を改善。
これらを使いこなすことで、単なるSQL操作にとどまらず、高度な分析基盤を構築できます。
まとめ
PySpark SQLは、SQL経験者にとっての強力な武器です。SQL文法をそのまま使えるため習得コストが低く、しかも分散処理の力で数百GB規模のデータを処理できます。DataFrame APIとの併用により、柔軟性と表現力も確保できます。
前回の記事「PySpark超概要」と合わせて理解すれば、PySparkの全体像とSQLモジュールの位置づけがクリアになるでしょう。これからビッグデータの分析やETL基盤構築を目指す方は、まずPySpark SQLから触ってみるのがおすすめです。