本トピックでは、DataWorks ノートブックにおける PySpark の構成方法について説明します。カスタム構成、OSS ストレージへのアクセス、サードパーティ製 Python パッケージ、JAR リソース、および Livy パラメーターについて取り扱います。
カスタム構成の使用
%%maxcompute_spark を実行した際に「dataworks-magic のバージョンをアップグレードする必要があります」というメッセージが表示された場合は、まずバージョンをアップグレードしてください。アップグレードを行わないと、以降に説明する機能が正しく動作しない場合があります。
起動時に SparkConf を設定します。たとえば、Livy の最大アイドル時間(
configには Livy 関連パラメーターが含まれます)やスキーマレベルの SQL 構文の有効化(spark_confには Spark 関連パラメーターが含まれます)を設定できます。その他のパラメーターについても同様のパターンで適用します。%%maxcompute_spark { "config": { # CPU およびメモリはデフォルトで 1 vCPU、4 GiB "cpu": 1, "memory": "4096M", "livy.server.max.idle.time": "10m" }, "quota": "XXX", "spark_conf": { "spark.sql.catalog.odps.enableNamespaceSchema": "true" } }構成を変更する場合は、コードを再度実行します。Spark セッションを再起動すると、以前のセッション状態はクリアされます。
OSS ストレージの使用
OSS アクセスパラメーターを構成します:
oss_endpointには内部エンドポイント(例:oss-cn-shanghai-internal.aliyuncs.com)を使用します。ノートブック内で
spark.hadoop.fs.oss.implまたはspark.hadoop.fs.AbstractFileSystem.oss.implを設定しないでください。設定すると OSS へのアクセスが妨げられる場合があります。
%%maxcompute_spark
{
"spark_conf": {
"spark.hadoop.odps.cupid.trusted.services.access.list": "<bucket-name>.<oss-endpoint>",
"spark.hadoop.fs.oss.accessKeyId": "***",
"spark.hadoop.fs.oss.accessKeySecret": "***",
"spark.hadoop.fs.oss.endpoint": "<oss-endpoint>"
}
}サードパーティ製 Python パッケージの使用
依存関係のパッケージ化:pyodps-pack を使用します。Python 3.11 を指定してください。Livy Spark セッションはデフォルトで Python 3.11 を使用します。バージョンを一致させることで、互換性の問題を回避できます。詳細については、「PySpark の Python バージョンと依存関係」をご参照ください。
# pyodps のインストール pip install pyodps # requirements.txt を準備し、パッケージ化 pyodps-pack -r requirements.txt --python-version=3.11 -o <package-name>パッケージを MaxCompute プロジェクトにアップロード:
-- odpscmd で実行 ADD archive /path/to/<package-name> -f;Spark でパッケージを使用するよう構成:
説明cupid.resourcesの値を複数指定する場合は、カンマ(,)で区切ります。詳細については、「データ相互運用性の構成」をご参照ください。PYTHONPATHのエントリを複数指定する場合は、コロン(:)で区切ります。本例では、PYTHONPATHにpackagesサブディレクトリが含まれています。これは pyodps-pack が自動的に追加するためです。別のパッケージ化手法を使用する場合は、PYTHONPATHを設定する前に、ディレクトリ構造を確認してください。PYTHONPATHの詳細については、「ユーザー定義 Python パッケージの参照」をご参照ください。
%%maxcompute_spark { "spark_conf": { "spark.hadoop.odps.cupid.resources": "<your_project>.<package-name>", "spark.executorEnv.PYTHONPATH": "./<your_project>.<package-name>/packages", "spark.yarn.appMasterEnv.PYTHONPATH": "./<your_project>.<package-name>/packages" } }
JAR またはその他のリソースパッケージの使用
tar.gz ファイルなどのリソースをアップロードします:
add archive /path/to/<package-name> -f;Spark がリソースを読み込むよう構成します。複数のリソースを指定する場合は、カンマ(,)で区切ります:
%%maxcompute_spark { "spark_conf": { "spark.hadoop.odps.cupid.resources": "<your_project>.<package-name>" } }
spark_conf パラメーターに両方の設定を追加することで、Python パッケージ構成と組み合わせて使用できます。
高度な構成
Spark バージョンの指定
サポートされているバージョン:
spark-3.1.1-odps0.47.0spark-3.4.2-odps0.48.0(デフォルト)spark-3.5.2-odps0.49.0
構成方法:
%%maxcompute_spark { "spark_conf": { "spark.hadoop.odps.spark.version": "spark-3.4.2-odps0.48.0" } }
デフォルトの Python 3.11 環境の無効化
カスタム Python 環境を使用する場合:
%%maxcompute_spark
{
"spark_conf": {
"spark.hadoop.odps.spark.alinux3.enabled": "false"
}
}Matplotlib を使用したプロット
まず Matplotlib をパッケージ化してアップロードします。「サードパーティ製 Python パッケージの使用」をご参照ください。その後、ノートブック内でプロットを実行します:
%%spark
import matplotlib.pyplot as plt
import io, base64, json
import matplotlib
# オプション
matplotlib.use('Agg')
# 最初に figure を作成(必須ステップ)
fig = plt.figure()
# 例としてのプロット
x = [1, 2, 3, 4]
y = [20, 22, 19, 23]
plt.plot(x, y, marker='o', linestyle='--', color='b')
plt.title("時間経過に伴う温度変化")
plt.xlabel("時間")
plt.ylabel("温度")
# ノートブック内にプロットをレンダリング(Livy マジックコマンド)
%matplot pltLivy 構成
以下の表に、構成可能な Livy パラメーターの一覧を示します。
パラメーター名 | デフォルト値 | 説明 |
| true | アクセスの制御を有効化します。デフォルトで有効化されています。無効化しないでください。 |
| 3d | Livy サーバーの最大存続期間です。デフォルトは 3 日間です。単位は s(秒)、m(分)、h(時)、d(日)です。 |
| 1h | Livy サーバーの最大アイドル時間です。デフォルトは 1 時間です。この時間内に Spark セッションが実行されない場合、サーバーは停止します。 |
| 12h | Spark セッションの最大アイドル時間です。デフォルトは 12 時間です。この時間内に Spark タスクが実行されない場合、セッションは停止します。 |
| 12h | 期限切れの Spark セッションの最大保持時間です。デフォルトは 12 時間です。この時間内にセッションを再開しなかった場合、セッションは完全に削除されます。 |
| 50 | Livy サーバーあたりの同時セッション数の上限です。デフォルトは 50 です。 |