EMR Serverless Spark の組み込み SQL エディタを使用して、Spark SQL ジョブをインタラクティブに記述して実行します。ジョブの実行後、Spark UI にアクセスして、実行ステータス、リソース使用量、ログを確認します。
前提条件
開始する前に、次のものが用意されていることを確認してください。
ワークスペース。詳細については、「ワークスペースの作成」をご参照ください。
SQL セッションインスタンス。詳細については、「SQL セッションの管理」をご参照ください。
Spark SQL ジョブの作成
DLF Catalog パラメータは SparkSession の初期化中にロードされます。PySpark コード内で spark.sql.catalog.dlf.warehouse などの Catalog 関連パラメータを spark.conf.set() を使用して動的に設定しても、有効にはなりません。これらのパラメータを正しく設定するには、ジョブの送信時に起動パラメータとして指定する必要があります。たとえば、EMR Serverless Spark コンソールの [Configuration] セクション、または CLI の --conf パラメータを使用して、spark.sql.catalog.dlf.warehouse=oss://your-bucket/warehouse-path を追加します。
開発ページに移動します。
EMR コンソールにログインします。
左側のナビゲーションペインで、[EMR Serverless] > [Spark] を選択します。
[Spark] ページで、対象のワークスペースの名前をクリックします。
[EMR Serverless Spark] ページで、左側のナビゲーションペインにある [Development] をクリックします。
ジョブを作成します。
[Development] タブで、
アイコンをクリックします。ダイアログボックスで [Name] を入力し、[Type] を [Spark SQL] に設定して、[OK] をクリックします。
右上隅で、データカタログ、データベース、実行中の SQL セッションインスタンスを選択します。新しい SQL セッションインスタンスを作成するには、ドロップダウンリストから [Connect to SQL Session] を選択します。詳細については、「SQL セッションの管理」をご参照ください。
エディタに SQL 文を入力します。
例 1:基本的な SQL 操作
データベースを作成して切り替え、テーブルを作成し、行を挿入して、データをクエリします。
create DATABASE test_sql; use test_sql; CREATE TABLE IF NOT EXISTS my_table (id INT, name STRING); INSERT INTO my_table VALUES(1, 'Alice'),(2, 'Bob'); SELECT * FROM my_table WHERE id > 1;結果はエディタ下部の出力パネルに表示されます。
#
id
name
1
2
Bob
例 2:CSV ベースの外部テーブル
Object Storage Service (OSS) の CSV ファイルに基づく外部テーブルを作成し、分析クエリを実行します。
oss://<bucketname>/user/を実際のバケットパスに置き換えてください。外部テーブルを作成します。テーブル名は
ordersとし、次のフィールドを定義します。order_id: 注文 ID です。order_date: 注文タイムスタンプ。例:'2025-07-01 10:00:00'。order_category:商品カテゴリ。例:'電子機器'、'アパレル'。order_revenue: 注文金額。
CREATE TABLE orders ( order_id STRING, -- 注文 ID order_date STRING, -- 注文タイムスタンプ order_category STRING, -- 製品カテゴリ order_revenue DOUBLE -- 注文金額 ) USING CSV OPTIONS ( path 'oss://<bucketname>/user/', header 'true' );テストデータを挿入します。
INSERT OVERWRITE TABLE orders VALUES ('o1', '2025-07-01 10:00:00', 'Electronics', 5999.0), ('o2', '2025-07-02 11:30:00', 'Apparel', 299.0), ('o3', '2025-07-03 14:45:00', 'Electronics', 899.0), ('o4', '2025-07-04 09:15:00', 'Home Goods', 99.0), ('o5', '2025-07-05 16:20:00', 'Electronics', 1999.0), ('o6', '2025-07-06 08:00:00', 'Apparel', 199.0), ('o7', '2025-07-07 12:10:00', 'Electronics', 799.0), ('o8', '2025-07-08 18:30:00', 'Home Goods', 59.0), ('o9', '2025-07-09 20:00:00', 'Electronics', 399.0), ('o10', '2025-07-10 07:45:00', 'Apparel', 599.0), ('o11', '2025-07-11 09:00:00', 'Electronics', 1299.0), ('o12', '2025-07-12 13:20:00', 'Home Goods', 159.0), ('o13', '2025-07-13 17:15:00', 'Apparel', 499.0), ('o14', '2025-07-14 21:30:00', 'Electronics', 999.0), ('o15', '2025-07-15 06:10:00', 'Home Goods', 299.0);分析クエリを実行します。次のクエリは、15 日間のカテゴリ別売上実績 (注文数、流通取引総額 (GMV)、平均注文額、最新注文日時) を返します。対象は、総収益が 1,000 を超えるカテゴリで、結果は GMV の降順、カテゴリ名の昇順で並べ替えられます。
SELECT order_category, COUNT(order_id) AS order_count, SUM(order_revenue) AS gmv, AVG(order_revenue) AS avg_order_amount, MAX(order_date) AS latest_order_date FROM orders WHERE CAST(order_date AS TIMESTAMP) BETWEEN '2025-07-01' AND '2025-07-15' GROUP BY order_category HAVING SUM(order_revenue) > 1000 ORDER BY gmv DESC, order_category ASC;
例 3:Hive Parquet テーブルの作成 (DLF フォーマットテーブル)
デフォルトでは、EMR Serverless Spark は Apache Paimon をテーブルフォーマットとして使用します。代わりに Hive Parquet テーブルを作成するには、ジョブの起動パラメータでデフォルト設定を上書きする必要があります。
起動パラメータ
Hive Parquet テーブルを作成する前に、Paimon カタログがテーブル作成をインターセプトしないように、次の Spark 設定パラメータを追加します。
spark.sql.catalog.spark_catalog=org.apache.spark.sql.hive.HiveCatalog spark.sql.defaultFileFormat=parquetこれらのパラメーターは、EMR Serverless Spark コンソールの [設定] セクションで、または CLI で
--confパラメーターを使用して追加できます。SQL メソッド
Hive Parquet テーブルを作成するには、
CREATE TABLE ... USING PARQUET構文を使用してください。STORED AS PARQUETは使用しないでください。CREATE TABLE my_parquet_table ( id INT, name STRING, created_at TIMESTAMP ) USING PARQUET;DataFrame API メソッド
データを Hive Parquet テーブルとして書き込むには、
df.write.format("parquet").saveAsTable(...)を使用します。df.write.format("parquet").saveAsTable("my_parquet_table")説明ワークスペースが DLF Catalog にバインドされている場合は、Spark セッションまたは SQL 文を使用してテーブルを作成し、メタデータカタログとの一貫性を確保することを推奨します。
(任意) 右側の [Version Information] タブをクリックしてバージョンを比較します。エディタでは、バージョン間の SQL コードの差異がハイライト表示されます。
ジョブの実行と公開を行います。
[Run] をクリックします。結果は [Execution Results] タブに表示されます。エラーが発生した場合は、[Execution Issues] タブを確認してください。右側の実行履歴パネルには、過去 3 日間のレコードが表示されます。
ジョブが正しく実行されることを確認した後、右上隅の [Publish] をクリックします。
[Publish] ダイアログボックスで、リリースノートを入力し、[OK] をクリックします。
Spark UI へのアクセス
Spark UI には、タスクの実行ステータス、リソース使用量、ログ情報が表示されます。これらは Spark ジョブの分析と最適化に役立ちます。
実行結果からのアクセス
この方法には、次のエンジンバージョン以降が必要です:esr-4.2.0 (esr-4.x)、esr-3.2.0 (esr-3.x)、または esr-2.6.0 (esr-2.x)。
SQL 文の実行後、[Execution Results] タブ下部の [Spark UI] をクリックします。
セッションインスタンスからのアクセス
SQL 文の実行後、セッションインスタンスを見つけて、
> [Spark UI] を選択します。
キーボードショートカット
機能 | Windows | Mac | 説明 |
現在のスクリプトの実行 |
|
| すべての SQL 文、または選択範囲のみを実行します。[Run] のクリックと同じです。 |
SQL のフォーマット |
|
| SQL 構造をフォーマットします:インデント、改行、キーワードの大文字/小文字を標準化します。 |
テキストの検索 |
|
| 現在のスクリプトでキーワードを検索します。 |
タスクの保存 |
|
| 現在の未公開ジョブを保存して、データの損失を防ぎます。 |
次のステップ
ワークフローを作成して、ジョブを定期的に実行するようにスケジュールします。詳細については、「ワークフローの作成」をご参照ください。完全なスケジューリングの例については、「Spark SQL 開発のクイックスタート」をご参照ください。
よくある質問
クエリ結果の 10,000 行のダウンロード制限を超えることはできますか?
いいえ。EMR Serverless Spark のデータ開発におけるクエリ結果のダウンロードには、プラットフォームの厳格な制限があります。最大 10,000 行までダウンロードでき、合計ファイルサイズは 10 MB を超えることはできません。この制限は設定で変更することはできません。
より大きなデータセットをエクスポートするには、次のいずれかの方法を使用します。
spark-submitを使用してジョブを送信し、結果をオブジェクトストレージサービス (OSS) または Hadoop 分散ファイルシステム (HDFS) に書き込みます。DataWorks のオフライン同期タスクでデータをエクスポートします。
EMR Serverless Spark は Spark History 用のパブリック API を提供していますか?
はい。EMR Serverless Spark はパブリック API を提供しています。利用可能な API の完全なリストについては、「API 概要」をご参照ください。