Spark は、Java Database Connectivity (JDBC) コネクタを介して MySQL にアクセスすることをネイティブにサポートしています。Serverless Spark は、起動時に MySQL JDBC ドライバー (バージョン 8.0.33) を自動的にロードします。SQL セッション、バッチ処理タスク、または Notebook を使用して MySQL に接続し、データを読み書きできます。
前提条件
Serverless Spark ワークスペースを作成済みであること。詳細については、「ワークスペースの作成」をご参照ください。
MySQL インスタンスを作成済みであること。
自己管理型の MySQL インスタンス、または ApsaraDB RDS for MySQL や PolarDB for MySQL などの Alibaba Cloud データベースサービスを使用できます。
このトピックの例では、ApsaraDB RDS for MySQL インスタンスを使用します。詳細については、「ApsaraDB RDS for MySQL インスタンスの作成とデータベースの構成」をご参照ください。
重要
Serverless Spark と MySQL 間のネットワーク接続が確立されていることを確認してください。構成の詳細については、「EMR Serverless Spark と他の VPC 間のネットワーク接続の確立」をご参照ください。
セキュリティグループルールを追加する際は、必要なポートを開いてください。この例では、TCP ポート 3306 を開く必要があります。
手順
方法 1: SQL セッションを使用する
SQL セッションを作成します。[セッション管理] でセッションを作成し、事前構成済みの [ネットワーク接続] を選択できます。詳細については、「SQL セッションの作成」をご参照ください。
[データ開発] で [SparkSQL] タスクを作成し、次の SQL 文を使用して接続をテストできます。
CREATE TEMPORARY VIEW test USING org.apache.spark.sql.jdbc OPTIONS ( url 'jdbc:mysql://<jdbc_url>/', dbtable '<db>.<table>', user '<username>', password '<password>' ); SELECT * FROM test;次の表にパラメーターを示します。
パラメーター
説明
urlJDBC 接続文字列。フォーマットは
jdbc:mysql://<jdbc_url>/です。<jdbc_url>を実際の値に置き換えてください。dbtable読み取るデータベーステーブルの名前。フォーマットは
<db>.<table>です。この例ではtest_mysql_db.testを使用します。userMySQL データベースのユーザー名。
説明ユーザーはターゲットテーブルに対する読み取り権限を持っている必要があります。
passwordMySQL データベースのパスワード。
テーブルの内容が正しく返された場合、接続は成功です。

データを挿入します。 次のコマンドを使用して、MySQL テーブルにデータを挿入します。
INSERT INTO test VALUES(4, 'd'),(5, 'e'); SELECT * FROM test;挿入したデータをクエリできれば、書き込み操作は成功です。

方法 2: Notebook セッションを使用する
Notebook セッションを作成します。[セッション管理] で Notebook セッションを作成し、事前構成済みの [ネットワーク接続] を選択できます。詳細については、「Notebook セッションの作成」をご参照ください。
[データ開発] で タスクを作成し、次の Python コードを使用して接続をテストします。
df = spark.read \ .format("jdbc") \ .option("url", "jdbc:mysql://<jdbc_url>") \ .option("dbtable", "<db>.<table>") \ .option("user", "<username>") \ .option("password", "<password>") \ .load() df.show()テーブルの内容が正しく返された場合、接続は成功です。

データを挿入します。 次のコードを使用して、MySQL テーブルにデータを挿入します。
df = spark.createDataFrame([(6, 'f'), (7, 'g')], ["id", "name"]) df.write \ .format("jdbc") \ .mode("append") \ .option("url", "jdbc:mysql://<jdbc_url>") \ .option("dbtable", "<db>.<table>") \ .option("user", "<username>") \ .option("password", "<password>") \ .save() df.show()mode("append")パラメーターは、既存のデータを上書きまたは削除するのではなく、新しいデータをターゲットテーブルに追加することを指定します。挿入したデータが正常に取得された場合、書き込み操作は成功です。

方法 3: Spark バッチジョブを使用する
テストコードを記述します。 次の Scala コードをコンパイルし、JAR ファイルにパッケージ化します。
package spark.test import org.apache.spark.sql.SparkSession object Main { def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName("test") .getOrCreate() val newRows = spark.createDataFrame(Seq((6, "f"), (7, "g"))).toDF("id", "name") newRows.write.format("jdbc") .mode("append") .option("url", "jdbc:mysql://<jdbc_url>") .option("dbtable", "<db>.<table>") .option("user", "<username>") .option("password", "<password>") .save() spark.read.format("jdbc") .option("url", "jdbc:mysql://<jdbc_url>") .option("dbtable", "<db>.<table>") .option("user", "<username>") .option("password", "<password>") .load() .show() spark.stop() } }バッチジョブを作成します。 [データ開発] で タスクを作成します。次に、次のパラメーターを構成します。構成の詳細については、「バッチジョブまたはストリーミングジョブの開発」をご参照ください。
[メイン JAR リソース]: JAR ファイルへのパスを選択または入力します。
[メインクラス] は
spark.test.Mainです。[ネットワーク接続]: 既存のネットワーク接続を選択します。
タスク完了後に検証結果を表示するには、[実行記録] セクションの [ログ調査] をクリックします。[ドライバーログ] の [Stdout] タブで、MySQL データベース内の対応するテーブルの内容を表示できます。