組み込みの PyODPS 機能では複雑なビジネス要件を満たせない場合、既存の Python コードを再利用したり、オープンソースのライブラリを使用したりする必要があります。DataWorks は、リソース参照によるカスタムスクリプトの読み込み、またはカスタムイメージや運用保守アシスタントを使用したサードパーティパッケージの統合という 2 つのソリューションを提供しています。このトピックでは、DataWorks の PyODPS ノードでカスタム Python スクリプトを呼び出したり、オープンソースのサードパーティパッケージをインストールして使用したりすることで、データ処理能力を拡張する方法について説明します。
クイックセレクション
ご利用の環境と要件に基づいてアプローチを選択してください。
|
シナリオ |
リソースグループタイプ |
ソリューション |
|
オープンソースのサードパーティパッケージの使用 |
サーバーレスリソースグループ |
|
|
専用スケジューリングリソースグループ |
||
|
カスタム |
サーバーレスリソースグループ / 専用スケジューリングリソースグループ |
以下の図は、各ソリューションの主なワークフローの概要です。
前提条件
開始する前に、以下の 2 つの基本概念を理解し、適切な設定方法を選択してください。
基本概念
-
ノードタイプ:PyODPS 2 vs. PyODPS 3
-
PyODPS 2:Python 2.7 環境に基づいています。
-
PyODPS 3:Python 3.7+ 環境に基づいています。
-
推奨事項:Python 2 の公式サポートは終了しているため、PyODPS 3 の使用を強く推奨します。このトピックでは、主に PyODPS 3 を例として使用します。
-
-
リソースグループタイプ:サーバーレスリソースグループ vs. 専用スケジューリングリソースグループ
-
サーバーレスリソースグループ (推奨):このリソースグループは伸縮自在でメンテナンスフリーです。カスタムイメージ を使用してサードパーティパッケージを管理できます。
-
専用スケジューリングリソースグループ (非推奨):これはレガシーソリューションです。ECS サーバーを購入して維持する必要があり、リソースは伸縮自在にスケールできません。運用保守アシスタント を使用して依存関係をインストールするには多くの制限があり、環境を破損させる可能性があります。
-
リソースグループタイプの特定
DataWorks コンソールで、ご利用のワークスペースの [ワークスペース詳細] ページに移動します。[リソースグループ] ページで、ワークスペースに関連付けられているリソースグループタイプを確認します。
-
タイプが 一般目的 の場合、サーバーレスリソースグループを使用しています。
-
タイプが データスケジューリング の場合、専用スケジューリングリソースグループを使用しています。
カスタムイメージを使用したオープンソースパッケージのインストール
この方法は、サーバーレスリソースグループに適用されます。
このセクションでは、pendulum パッケージを含むカスタム環境を作成するエンドツーエンドの例を示します。その後、PyODPS 3 ノードを使用してこのパッケージを呼び出し、特定のタイムゾーンの現在時刻を取得してフォーマットします。
ステップ 1: pendulum ライブラリを含むカスタムイメージの作成
カスタムイメージは、サーバーレスリソースグループの実行環境を定義します。
-
DataWorks コンソールにログインし、左側のナビゲーションウィンドウで [イメージ管理] をクリックします。
-
Custom Image タブに移動します。
-
左上隅の [イメージの作成] をクリックします。作成ページで、以下の主要なパラメーターを設定します。
パラメーター
説明
Image Name
カスタムイメージの名前を入力します。例:
pyodps3_with_pendulum参照タイプ
[DataWorks 公式イメージ] を選択します。
イメージ名/ID
ドロップダウンリストから、DataWorks 公式イメージ dataworks_pyodps_task_pod を選択します。
サポートされるタスクタイプ
PyODPS 3 タスクタイプを選択します。
インストールパッケージ
Python3 を選択し、ドロップダウンリストからシステム提供の pendulum パッケージを選択します。
組み込まれていないオープンソースパッケージをインストールするには、スクリプトモードを使用して手動でインストールできます。設定方法の詳細については、「カスタムイメージ作成のパラメーター」をご参照ください。
重要パブリックインターネットからオープンソースパッケージをインストールするには、サーバーレスリソースグループに関連付けられている VPC がパブリックネットワークアクセスを持っている必要があります。
-
OK をクリックしてカスタムイメージを作成します。
-
[カスタムイメージ] ページで、イメージをテストしてからデプロイします。イメージは、デプロイする前にテストに合格する必要があります。
-
対象イメージの 操作 列で、 をクリックして、所属するワークスペースをカスタムイメージに関連付けます。
イメージが正常にデプロイされると、その [デプロイステータス] が [デプロイ済み] に変わり、[アクション] 列に [無効化] ボタンが表示されます。アクションのドロップダウンメニューには、[変更]、[ビルド]、[バージョンの表示]、[イメージの削除] などのオプションも含まれます。
ステップ 2: PyODPS 3 ノードの作成と設定
-
左側のナビゲーションバーで をクリックし、ドロップダウンリストから対象のワークスペースを選択し、Go to DataStudio をクリックします。
-
既存のビジネスフローで、
pyodps3_pendulum_testという名前の PyODPS 3 ノードを作成します。 -
pyodps_pendulum_testノードのコードエディタに、次の Python 3 コードを入力します。# pendulum パッケージはカスタムイメージにインストールされているため、直接インポートできます。 import pendulum print("サードパーティパッケージ pendulum のテストを開始します...") try: # pendulum を使用して "Asia/Shanghai" タイムゾーンの現在時刻を取得します。 shanghai_time = pendulum.now('Asia/Shanghai') # フォーマットされた時刻とタイムゾーン情報を出力します。 print(f"'pendulum' パッケージのインポートに成功しました。") print(f"現在の上海時刻は: {shanghai_time.to_datetime_string()}") print(f"対応するタイムゾーンは: {shanghai_time.timezone_name}") print("\nテストに合格しました!PyODPS ノードはサードパーティパッケージを正常に呼び出しました。") except Exception as e: print(f"テストに失敗しました。エラーが発生しました: {e}")
ステップ 3: テストと結果の検証
-
ツールバーの
アイコンをクリックしてコードを実行し、Parameter ダイアログボックスで、作成したイメージ pyodps3_with_pendulumを選択します。重要対象のイメージが見つからない場合は、イメージが現在のワークスペースに関連付けられていることを確認してください。詳細については、「ステップ 1: カスタムイメージの作成」のステップ 6 をご参照ください。
-
ページ下部の実行ログを表示します。次の出力は、
pendulumパッケージが正常に呼び出されたことを示しています。サードパーティパッケージ pendulum のテストを開始します... 'pendulum' パッケージのインポートに成功しました。 現在の上海時刻は: 2025-09-27 15:45:00 対応するタイムゾーンは: Asia/Shanghai テストに合格しました!PyODPS ノードはサードパーティパッケージを正常に呼び出しました。
ステップ 4: PyODPS 3 ノードのデプロイ
テストが完了したら、右側のペインで に移動します。ご利用のサーバーレスリソースグループを選択し、イメージを作成したカスタムイメージ pyodps3_with_pendulum に設定します。その後、ノードをオペレーションセンターにデプロイできます。
運用保守アシスタントを使用したオープンソースパッケージのインストール
この方法は、レガシーソリューションであり、もはや推奨されない専用スケジューリングリソースグループに適用されます。より強力で柔軟なサーバーレスリソースグループへの移行を推奨します。
-
DataWorks ワークスペースリストにログインし、ページ上部でリージョンを切り替えてから、対象ワークスペースの 操作 列にある Details をクリックして、ワークスペース詳細ページに移動します。
-
左側のナビゲーションバーで Resource Group をクリックし、関連付けられている専用スケジューリングリソースグループを見つけ、[アクション] 列で をクリックします。
-
[運用保守アシスタント] ページで、左上隅の [コマンドの作成] をクリックします。
-
ご利用の Python バージョンに対応するコマンドを入力します。
-
Python 3 (PyODPS 3):デフォルトのオプションを維持します。Python3 パッケージタイプのドロップダウンリストから、pendulum インストールパッケージを選択します。
-
Python 2 (PyODPS 2):[手動入力] モードを選択し、コマンドの内容を入力します。
pip install --upgrade pip pip install "pendulum<2.0"
-
-
[運用保守アシスタント] ページで、[アクション] 列の [コマンドの実行] をクリックします。コマンドが正常に実行された後、対応する PyODPS ノードで直接
import pendulumを使用できます。
カスタム Python リソースの参照
別の .py ファイルから関数を呼び出すだけでよい場合は、次の手順に従ってください。
-
Python リソースの作成
-
[データ開発] ページで、対象のビジネスフローを右クリックし、 を選択します。
-
Create Resource ダイアログボックスで、リソースの Name を入力します (例:
my_utils.py)。そして Create をクリックします。 -
Python リソースエディタに次のコードを入力します。
# my_utils.py (Python 3 構文) def say_hello(name): print(f"こんにちは、{name}!これは my_utils モジュールからです。") -
リソースを保存して送信します。
-
-
ノードの作成とリソースの参照
-
対象のビジネスフローで MaxCompute を右クリックし、 を選択し、画面の指示に従ってノードを作成します。
-
ノード内で、
##@resource_reference{"my_utils.py"}ディレクティブを使用してリソースを参照します。完全なコードは次のとおりです。##@resource_reference{"my_utils.py"} import sys import os # リソースの現在のディレクトリを Python インタープリターの検索パスに追加します。 sys.path.append(os.path.dirname(os.path.abspath('my_utils.py'))) # これで、リソースを通常のモジュールのようにインポートして使用できます。 import my_utils my_utils.say_hello("DataWorks")
-
-
ノードを実行します。ログに "こんにちは、DataWorks!これは my_utils モジュールからです。" という出力が表示されます。
よくある質問
-
Q:コマンドを使用して手動でパッケージをインストールする際、カスタムイメージのテストが長時間進まないのはなぜですか?
-
タスクの実行環境がパブリックインターネット上のサードパーティパッケージに依存している場合、サーバーレスリソースグループに関連付けられている VPC はパブリックネットワークアクセスを持っている必要があります。詳細については、「リソースグループのパブリックネットワークアクセスを有効にする」をご参照ください。
-
https://mirrors.aliyun.com/pypi/simple/ などの別の Python パッケージソースに切り替えてみてください。Alibaba Cloud ミラーはパブリックネットワークアクセスを必要としません。
-
-
Q:サードパーティパッケージのインポートに失敗した場合はどうすればよいですか?
-
カスタムイメージが正常にデプロイされていることを確認してください。
-
イメージがサポートするタスクタイプ (PyODPS 2 または PyODPS 3) が、ご利用のノードのタイプと一致していることを確認してください。
-
ノードのプロパティで正しいカスタムイメージが選択されていることを確認してください。
パブリックリソースグループは選択できません。
-
インストールしたパッケージのバージョンが、ご利用の Python バージョンと互換性があるか確認してください。例えば、
pendulum2.0 以降は Python 2 をサポートしていません。
-
> [所属ワークスペースの変更]
> O&M Assistant