MaxFrameは、Python開発におけるサードパーティパッケージの管理を簡素化する自動パッケージサービスを提供します。 このサービスでは、ジョブ開発中に必要な外部依存パッケージを宣言できます。 ジョブの実行中、依存関係ファイルは自動的にパッケージ化され、ジョブ環境に統合されます。 パッケージを手動でアップロードする必要はありません。 これにより、パッケージ管理が簡単になります。
注意事項
標準のMaxFrame SDK (オンプレミスMaxFrameクライアント) を使用してMaxFrameにアクセスする場合は、MaxFrame SDKのバージョンがV0.1.0b5以降であることを確認してください。 MaxFrameにアクセスする方法の詳細については、「準備」をご参照ください。
自动包装サービスの说明
MaxFrameでは、with_python_requirements関数を使用して自動パッケージサービスを呼び出すことができます。 次のコードは、構文の例を示しています。
def with_python_requirements(
*requirements: str,
force_rebuild: bool = False,
prefer_binary: bool = False,
pre_release: bool = False,
): ...
パラメーターの説明:
要件: 必須。 このパラメーターは、1つ以上の外部依存関係パッケージを宣言するために使用できます。 宣言は、Python pipのパッケージインストーラで使用されるPEP 508の仕様に準拠している必要があります。 サンプルコード:
@with_python_requirements("scikit_learn>1.0", "xgboost>1.0")force_rebuild: オプションです。 このパラメータは、自動パッケージング中にサードパーティパッケージが既に存在する場合に繰り返しパッケージングを実行するかどうかを指定します。 有効な値:
False: パッケージングは繰り返し実行されませんが、生成されたパッケージは一時的なリソースとして保存され、毎日削除されます。 デフォルト値です。
True: パッケージングが繰り返し実行され、PyPIイメージの最新バージョンのリソースが強制的に使用され、長期リソースとして保存されます。
prefer_binary: オプション。 バイナリホイールファイルを優先的にパッケージ化するかどうかを指定します。 有効な値:
False: システムはバイナリホイールファイルを優先的にパッケージ化しません。 デフォルト値です。
True: システムはバイナリホイールファイルを優先的にパッケージ化します。
このパラメーターをTrueに設定することは、pipに -- preferred-binaryを指定することと同じです。これは、バイナリホイールファイルを優先的にパッケージ化します。 パッケージング効率は高いかもしれませんが、最新バージョンのパッケージは使用できません。
pre_release: オプション。 このパラメーターは、アルファフェーズまたはベータフェーズで事前リリースされたファイルをパッケージ化できるかどうかを指定します。 有効な値:
false: アルファまたはベータフェーズで事前リリースされたファイルはパッケージ化できません。 デフォルト値です。
True: アルファまたはベータフェーズで事前リリースされたファイルをパッケージ化できます。
サンプルコード
次のコードは、サードパーティパッケージを自動的にパッケージ化する方法の例を示しています。
from odps import ODPS
from odps.udf import annotate
import os
from odps import ODPS, options
import maxframe.dataframe as md
from maxframe import new_session
o = ODPS(
# Set the environment variable ALIBABA_CLOUD_ACCESS_KEY_ID to the AccessKey ID of your Alibaba Cloud account.
# Set the environment variable ALIBABA_CLOUD_ACCESS_KEY_SECRET to the AccessKey secret of your Alibaba Cloud account.
# We recommend that you do not directly use the strings of your AccessKey ID and AccessKey secret.
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
project='your-default-project',
endpoint='your-end-point'
)
session = new_session(o)
data = [["abcd"], ["efgh"], ["ijkl"], ["mno"]]
md_df = md.DataFrame(data, columns=["col1"])
# Call the automatic packaging service.
from maxframe.udf import with_python_requirements
@with_python_requirements("jieba==0.40 cloudpickle pandas")
def process(row):
import jieba
row["col1"] = row["col1"] + "_" + jieba.__version__
return row
md_result = (
md_df.apply(
process,
axis=1,
result_type="expand",
output_type="dataframe",
dtypes=md_df.dtypes.copy(),
)
.execute()
.fetch()
)