すべてのプロダクト
Search
ドキュメントセンター

DataWorks:PyODPS ノードでのサードパーティパッケージとカスタム Python スクリプトの使用

最終更新日:Dec 10, 2025

PyODPS の標準機能だけでは複雑なビジネス要件を満たせない場合、既存の Python コードを再利用したり、オープンソースライブラリを使用したりすることができます。DataWorks は、データ処理能力を拡張するために 2 つの方法を提供しています。リソースとして参照することでカスタムスクリプトを読み込む方法と、カスタムイメージまたは O&M Assistant を使用してランタイム環境を設定することで強力なサードパーティパッケージを統合する方法です。このトピックでは、DataWorks の PyODPS ノードでカスタム Python スクリプトを呼び出し、オープンソースパッケージを使用する方法について説明します。

利用シーン

ご利用の環境と要件に応じて、適切な方法を選択します。

シナリオ

リソースグループタイプ

ソリューション

オープンソースのサードパーティパッケージに依存

サーバーレスリソースグループ

カスタムイメージを使用したオープンソースパッケージのインストール

専用スケジューリングリソースグループ

O&M Assistant を使用したオープンソースパッケージのインストール

カスタムの .py スクリプトファイルのみに依存

サーバーレスリソースグループまたは専用スケジューリングリソースグループ

カスタム Python リソースの参照

以下の図は、各ソリューションの主要なプロセスを示しています。

事前準備

開始する前に、以下の 2 つの主要な概念を理解し、どの設定方法を使用するかを決定する必要があります。

概念の説明

  1. ノードタイプ:PyODPS 2 vs. PyODPS 3

    • PyODPS 2Python 2.7 環境に基づきます。

    • PyODPS 3Python 3.7+ 環境に基づきます。

    • 推奨Python 2 の公式サポートは終了しているため、PyODPS 3 の使用を強く推奨します。このトピックでは、PyODPS 3 を主な例として使用します。

  2. リソースグループタイプ:サーバーレスリソースグループ vs. 専用スケジューリングリソースグループ

    • サーバーレスリソースグループ推奨。このタイプのリソースグループは、弾力性があり、メンテナンスフリーです。カスタムイメージを使用して、サードパーティの依存関係を管理できます。このソリューションは強力で柔軟です。

    • 専用スケジューリングリソースグループ:レガシーソリューション。非推奨。事前に ECS サーバーを購入し、メンテナンスする必要があります。リソースは弾力的にスケーリングできません。O&M Assistant を使用した依存関係のインストールには多くの制限があり、環境を汚染する可能性があります。

リソースグループタイプの判別

DataWorks コンソールで、[ワークスペース詳細] パネルの [リソースグループ] ページに移動し、ワークスペースにアタッチされているリソースグループのタイプを確認します。

  • タイプが [汎用タイプ] の場合、サーバーレスリソースグループを使用しています。

  • タイプが [データスケジューリング] の場合、専用スケジューリングリソースグループを使用しています。

カスタムイメージを使用したオープンソースパッケージのインストール

重要

この方法は、サーバーレスリソースグループに適用されます。

このセクションでは、エンドツーエンドの完全なケースを通して説明します。pendulum パッケージを含むカスタム環境を作成します。次に、PyODPS 3 ノードでそれを呼び出し、特定のタイムゾーンの現在時刻を取得してフォーマットします。

ステップ 1:pendulum を含むカスタムイメージの作成

カスタムイメージは、サーバーレスリソースグループのランタイム環境を準備するために使用されます。

  1. DataWorks コンソールにログインします。左側のナビゲーションウィンドウで、[イメージ管理] をクリックします。

  2. [カスタムイメージ] タブをクリックします。

  3. 左上隅の [イメージの作成] をクリックします。表示されたページで、以下の主要なパラメーターを設定します。

    パラメーター

    説明

    イメージ名

    カスタムイメージの名前。例:pyodps3_with_pendulum

    参照タイプ

    [DataWorks 公式イメージ] を選択します。

    イメージ名 / ID

    ドロップダウンリストから、DataWorks 公式イメージ dataworks_pyodps_task_pod を選択します。

    サポートされているタスクタイプ

    PyODPS 3 タスクタイプを選択します。

    [インストールパッケージ]

    [Python3] を選択し、ドロップダウンリストから pendulum パッケージを選択します。

    組み込みでないオープンソースパッケージをインストールするには、スクリプトモードで手動でインストールできます。設定方法の詳細については、「カスタムイメージのパラメーターの作成」をご参照ください。
    重要

    インターネットからオープンソースパッケージをインストールする場合、サーバーレスリソースグループにアタッチされている VPC は、パブリックネットワークアクセスが有効になっている必要があります。

  4. [OK] をクリックしてカスタムイメージを作成します。

  5. [カスタムイメージ] ページで、対象のイメージをテストし、その後公開します。イメージはテストに合格した後にのみ公開できます。

  6. 対象イメージの [操作] 列で、image > [ワークスペースの変更] をクリックして、カスタムイメージをワークスペースに関連付けます。

    image

ステップ 2:PyODPS 3 ノードの作成と設定

  1. 左側のナビゲーションウィンドウで、[データ開発と O&M] > [データ開発] をクリックします。ドロップダウンリストから対象のワークスペースを選択し、[データ開発へ] をクリックします。

  2. 既存のビジネスフローの下に、PyODPS 3 ノードを作成します。例えば、ノードに pyodps3_pendulum_test という名前を付けます。

  3. pyodps_pendulum_test ノードのコードエディタに、次の Python 3 コードを入力します:

    # pendulum はカスタムイメージにインストールされているため、直接インポートできます。Python 3 構文
    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:結果のテストと検証

  1. ツールバーで ** アイコンをクリックしてコードを実行します。[パラメーター] ダイアログボックスで、作成した pyodps3_with_pendulum イメージを選択します。

    重要

    対象のイメージが見つからない場合は、イメージが現在のワークスペースにアタッチされていることを確認してください。詳細については、ステップ 1 のサブステップ 6 をご参照ください。

  2. ページ下部の実行ログを確認します。以下の出力は、pendulum パッケージが正常に呼び出されたことを示しています。

    サードパーティパッケージ pendulum のテストを開始します...
    'pendulum' パッケージのインポートに成功しました。
    現在の上海時刻は: 2025-09-27 15:45:00
    対応するタイムゾーンは: Asia/Shanghai
    テストに合格しました!PyODPS ノードはサードパーティパッケージを正常に呼び出しました。

ステップ 4:PyODPS 3 ノードの公開

テストが完了したら、ノードエディタの右側にある [プロパティ] > [リソースグループ] に移動します。準備したサーバーレスリソースグループを選択し、イメージをカスタムイメージ pyodps3_with_pendulum に変更します。その後、ノードをオペレーションセンターに公開します。

O&M Assistant を使用したオープンソースパッケージのインストール

重要

この方法は、現在では推奨されていない専用スケジューリングリソースグループ向けです。より強力で柔軟なサーバーレスリソースグループへの移行を推奨します。

  1. DataWorks ワークスペースリストにログインします。上部のナビゲーションバーで、正しいリージョンに切り替えます。対象のワークスペースを見つけ、[操作] 列の [詳細] をクリックして、ワークスペースの製品ページに移動します。

  2. 左側のナビゲーションウィンドウで、[リソースグループ] をクリックします。関連付けられた専用スケジューリングリソースグループを見つけ、[操作] 列で image > [O&M Assistant] をクリックします。

  3. [O&M Assistant] ページで、左上隅の [コマンドの作成] をクリックします。

  4. ご利用の Python バージョンに基づいて適切なコマンドを入力します。

    • Python 3 (PyODPS 3):他のデフォルトオプションはそのままにします。ドロップダウンリストから、Python3 パッケージタイプの下にある pendulum インストールパッケージを選択します。

    • Python 2 (PyODPS 2)[手動入力] モードを選択し、コマンドの内容を入力します。

      pip install --upgrade pip
      pip install "pendulum<2.0"
  5. [O&M Assistant] ページで、[操作] 列の [コマンドの実行] をクリックします。コマンドが正常に実行された後、対応する PyODPS ノードで直接 import pendulum を使用できます。

カスタム Python リソースの参照

自分で作成した別の .py ファイルから関数を呼び出したいだけの場合は、次の手順を実行します:

  1. Python リソースの作成

    1. [データ開発] ページで、対象のビジネスフローを右クリックし、[リソースの作成] > [MaxCompute] > [Python] を選択します。

    2. [リソースの作成] ダイアログボックスで、リソースの [名前] を入力し (例:my_utils.py)、[作成] をクリックします。

    3. Python リソースに次のコードを入力します。

      # my_utils.py Python 3 構文
      def say_hello(name):
          print(f"こんにちは、{name}!これは my_utils モジュールからです。")
    4. リソースを保存して送信します。

  2. PyODPS 3 ノードを作成し、リソースを参照する

    • 対象のビジネスフローで、[MaxCompute] を右クリックし、[ノードの作成] > [PyODPS 3] を選択してノードを作成します。

    • ノード内で、##@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")
  3. ノードを実行します。ログに "こんにちは、DataWorks!これは my_utils モジュールからです。" という出力が表示されます。

よくある質問

  • Q:コマンドを使用して手動でパッケージをインストールすると、カスタムイメージのテストが長時間進まないのはなぜですか?

    • A:タスクのランタイム環境がインターネット上のサードパーティパッケージに依存している場合、サーバーレスリソースグループにアタッチされている VPC はパブリックネットワークアクセスが有効になっている必要があります。詳細については、「リソースグループのパブリックネットワークアクセスを有効にする」をご参照ください。

    • https://mirrors.aliyun.com/pypi/simple/ のような別の Python パッケージソースに切り替えることも試せます。Alibaba Cloud のミラーはパブリックネットワークアクセスを必要としません。

  • Q:サードパーティパッケージのインポートに失敗した場合はどうすればよいですか?

    1. カスタムイメージ正常に公開されていることを確認してください。

    2. イメージがサポートするタスクタイプ (PyODPS 2 または 3) が、作成したノードのタイプと一致していることを確認してください。

    3. PyODPS ノードのスケジューリング構成で、カスタムイメージが正しく選択されていることを確認してください。

      パブリックリソースグループは選択できません。
    4. インストールしたパッケージのバージョンが、ご利用の Python バージョンと互換性があるか確認してください。例えば、pendulum 2.0 以降のバージョンは Python 2 をサポートしていません。

関連ドキュメント