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