MaxFrame で Python コードを開発する場合、サードパーティのパッケージやイメージをリファレンスすることがよくあります。MaxFrame は、アップロードされたパッケージやイメージを直接使用して迅速にアクセスできるインターフェイスを提供します。
MaxFrame 開発でサードパーティのパッケージをリファレンスする
サードパーティのパッケージをアップロードします。
説明サードパーティのパッケージの作成の詳細については、「PyODPS 用のサードパーティパッケージを作成する」をご参照ください。
サードパーティのパッケージを使用する前に、パッケージが Archive リソースとして MaxCompute にアップロードされていることを確認してください。この Topic では、サードパーティパッケージ packages.tar.gz を例として使用します。次のいずれかのメソッドを使用してパッケージをアップロードできます。
コードを使用してパッケージをアップロードします。次のコードに例を示します。
import os from odps import ODPS # ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が AccessKey ID に設定されていることを確認してください。 # ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が AccessKey Secret に設定されていることを確認してください。 # AccessKey ID または AccessKey Secret の文字列を直接使用しないでください。 o = ODPS( os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), project='<YOUR-DEFAULT-PROJECT>', endpoint='<YOUR-END-POINT>', ) # packages.tar.gz をターゲットパッケージのパスとファイル名に置き換えます。 o.create_resource("packages.tar.gz", "archive", fileobj=open("packages.tar.gz", "rb"))DataWorks を使用してリソースをアップロードします。詳細については、「MaxCompute リソースの作成と使用」をご参照ください。
MaxFrame 開発でサードパーティのパッケージをリファレンスします。詳細については、「自動パッケージングサービス」をご参照ください。
MaxFrame では、宣言を使用してジョブ開発中にサードパーティのパッケージとファイルを参照できます。これを行うには、次の例に示すように
with_resource_librariesモジュールをインポートします。from maxframe.udf import with_resource_libraries @with_resource_libraries("packages.tar.gz", "demo.py")
例
次の例は、MaxFrame ジョブでサードパーティのパッケージをリファレンスする方法を示しています。この例では、packages.tar.gz パッケージをリファレンスして、test_float_col テストテーブルの列の Population Stability Index (PSI) 値を計算します。
テストテーブル
test_float_colとテストデータを準備します。CREATE TABLE test_float_col (col1 double); INSERT INTO test_float_col VALUES (3.75),(2.51);MaxFrame コードを記述し、ローカルマシンに
demo.pyファイルとして保存します。次のコードに例を示します。# test_float_col テストテーブルの col1 列の PSI 値を計算します。 import os from odps import ODPS, options from maxframe.session import new_session import maxframe.dataframe as md from maxframe.config import options from maxframe import config from maxframe.udf import with_resource_libraries # サードパーティのパッケージをリファレンスします。 @with_resource_libraries("packages.tar.gz") def my_psi(v): from scipy.special import psi return float(psi(v)) o = ODPS( # ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が AccessKey ID に設定されていることを確認してください。 # ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が AccessKey Secret に設定されていることを確認してください。 # AccessKey ID または AccessKey Secret の文字列を直接使用しないでください。 os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), project='your-default-project', endpoint='your-end-point' ) # MaxFrame セッションを作成します。 session = new_session(o) df = md.read_odps_table('test_float_col') # コードを実行して結果を取得します。 print(df.col1.map(my_psi).execute().fetch())ローカル MaxFrame クライアントで demo.py ファイルを実行します。次のコマンドに例を示します。
python demo.py次の結果が返されます。
0 1.182537 1 0.708048 Name: col1, dtype: float64
MaxFrame 開発でイメージをリファレンスする
次の例は、MaxFrame ジョブでイメージを使用する方法を示しています。この例では、組み込み scipy イメージをリファレンスして、test_float_col テストテーブルの列の PSI 値を計算します。
テストテーブル
test_float_colとテストデータを準備します。CREATE TABLE test_float_col (col1 double); INSERT INTO test_float_col VALUES (3.75),(2.51);CREATE TABLE test_float_col (col1 double); INSERT INTO test_float_col VALUES (3.75),(2.51);MaxFrame コードを記述し、ローカルマシンに
demo.pyファイルとして保存します。次のコードに例を示します。# test_float_col テストテーブルの col1 列の PSI 値を計算するコード。 import os from odps import ODPS, options from maxframe.session import new_session import maxframe.dataframe as md from maxframe.config import options from maxframe import config # 組み込みの scipy イメージをリファレンスします。 config.options.sql.settings = { "odps.session.image": "scipy" } def my_psi(v): from scipy.special import psi return float(psi(v)) o = ODPS( # ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が AccessKey ID に設定されていることを確認してください。 # ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が AccessKey Secret に設定されていることを確認してください。 # AccessKey ID または AccessKey Secret の文字列を直接使用しないでください。 os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'), os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'), project='your-default-project', endpoint='your-end-point' ) # MaxFrame セッションを作成します。 session = new_session(o) df = md.read_odps_table('test_float_col') # コードを実行して結果を取得します。 print(df.col1.map(my_psi).execute().fetch())ローカル MaxFrame クライアントで
demo.pyファイルを実行します。次のコマンドに例を示します。python demo.py次の結果が返されます。
0 1.182537 1 0.708048 Name: col1, dtype: float64