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

:MaxCompute タスクでの FG の使用

最終更新日:May 28, 2026

MaxCompute PyFG (Python Feature Generation) ジョブは、オフラインバッチで複雑な特徴量を生成します。list、map、浮動小数点、int などの複雑な ODPS 2.0 データ型をサポートします。このジョブでは、設定ファイルとコマンドラインパラメーターを使用して、生成された特徴量をビニング処理するかどうかを決定します。

方法 1: 汎用リソースグループイメージの使用

DataWorks コンソールで、[スケジューリング設定] > [リソースプロパティ] に移動します。 汎用リソースグループを選択し、最新の dataworks_pairec_task_pod イメージを選択します。

注:dataworks_pairec_task_pod イメージのリリースは pyfg の更新に遅れる場合があるため、イメージに最新の pyfg パッケージが含まれていない可能性があります。必要なバージョンを確認するには、推奨ソリューションのカスタマイズ - 機能設定で生成されたスクリプトをご参照ください。最新バージョンの pyfg を使用するには、方法 3 を使用して、リソースグループ用のカスタムイメージを作成してください。

方法 2: 依存関係のインストール (DataWorks の旧バージョン)

DataWorks コンソールにログインし、スケジューリング用の専用リソースグループを作成し、O&M アシスタントを使用して pyfg パッケージをインストールします。

DataWorks 専用リソースグループに pyfg パッケージをインストールするには、DataWorks->管理センター->リソースグループリスト->O&Mアシスタント に移動し、次のコマンドを実行します。

/home/tops/bin/pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade --force-reinstall http://tzrec.oss-cn-beijing.aliyuncs.com/third_party/pyfg105-1.0.5-cp37-cp37m-linux_x86_64.whl

よくある質問

次のエラーが表示される場合:

Executing user script with PyODPS 0.10.8 (wrapper version: 0.11.6)
/home/tops/lib/python3.7/site-packages/odps/types.py:1381: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  float_builtins += (np.float,)
/home/tops/lib/python3.7/site-packages/odps/df/backends/pd/types.py:35: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  _np_float_types = list(map(np.dtype, [np.float, np.float32, np.float64]))
/home/tops/lib/python3.7/site-packages/odps/df/backends/pd/types.py:40: DeprecationWarning: `np.bool` is a deprecated alias for the builtin `bool`. To silence this warning, use `bool` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.bool_` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  _np_to_df_types[np.dtype(np.bool)] = types.boolean
/home/tops/lib/python3.7/site-packages/odps/df/backends/pd/types.py:41: DeprecationWarning: `np.str` is a deprecated alias for the builtin `str`. To silence this warning, use `str` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.str_` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  _np_to_df_types[np.dtype(np.str)] = types.string
/home/tops/lib/python3.7/site-packages/odps/ipython/magics.py:35: DeprecationWarning: `np.float` is a deprecated alias for the builtin `float`. To silence this warning, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  np_float_types = map(np.dtype, [np.float, np.float16, np.float32, np.float64])
package: pyfg105
package path: /home/tops/lib/python3.7/site-packages/pyfg105
custom_lib_path: /home/tops/lib/python3.7/site-packages/pyfg105/lib
Initializing pyfg...
WARNING: Logging before InitGoogleLogging() is written to STDERR
I20260525 20:54:34.598881    21 str_utils.cc:252] GlobalConfig ctor: 0x7fc8a7ffa040
I20260525 20:54:34.598944    21 str_utils.cc:54] AVX supported
I20260525 20:54:34.598951    21 str_utils.cc:56] FMA supported
I20260525 20:54:34.598958    21 str_utils.cc:75] AVX-512F not supported
I20260525 20:54:34.598961    21 str_utils.cc:255] support avx512: false
I20260525 20:54:34.598968    21 str_utils.cc:264] will NOT use avx512
I20260525 20:54:34.598982    21 base_feature.cc:705] reset global fg config
pyfg version: 1.0.5 loaded
2026-05-25 20:54:34,606 WARNING:odps.pyodpswrapper:Code with error
===================
from pyfg105 import run_on_odps
fg_task = run_on_odps.FgTask(
    args['input_table'], 
    args['output_table'], 
    args['fg_json_file'], 
    args['partition_value'],
    force_delete_output_table=True,
    force_update_resource=True)
fg_task.create_output_table(o)
===================
Traceback (most recent call last):
  File "/home/tops/lib/python3.7/site-packages/pyfg105/run_on_odps.py", line 12, in <module>
    from .create_output_table import TableCreator
  File "/home/tops/lib/python3.7/site-packages/pyfg105/create_output_table.py", line 2, in <module>
    from odps.models import TableSchema, Column
ImportError: cannot import name 'TableSchema' from 'odps.models' (/home/tops/lib/python3.7/site-packages/odps/models/__init__.py)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "<pyodps_user_code>", line 1, in <module>
    from pyfg105 import run_on_odps
  File "/home/tops/lib/python3.7/site-packages/pyfg105/run_on_odps.py", line 15, in <module>
    from create_output_table import TableCreator
  File "/home/tops/lib/python3.7/site-packages/pyfg105/create_output_table.py", line 2, in <module>
    from odps.models import TableSchema, Column
ImportError: cannot import name 'TableSchema' from 'odps.models' (/home/tops/lib/python3.7/site-packages/odps/models/__init__.py)

このエラーは、現在の専用リソースグループ上の pyodps のバージョンが古いために発生します。 最新バージョンにアップグレードし、対応する pyodpswrapper パッケージもアップグレードする必要があります。 ただし、そうすることで python 環境内の他のパッケージのバージョンが変更され、python タスクが失敗する可能性があります。 最も安全な方法は、リソースグループにカスタムイメージを使用することです (方法3)。

方法 3: リソースグループイメージのカスタマイズ (DataWorks の新しいバージョン向け)

手順については、「カスタムイメージ」をご参照ください。

リソースファイルのアップロード

FG 設定ファイル (JSON 形式) を MaxCompute プロジェクトにアップロードします。

一部の特徴量オペレーターには、追加のリソースファイルが必要です。これらのファイルを MaxCompute プロジェクトに手動でアップロードする必要があります。

特徴量オペレーター

説明

リソースファイルパラメーター

text_normalizer

テキスト正規化

ストップワードファイル stop_char_file

tokenize_feature

テキストトークン化特徴量

語彙設定ファイル vocab_file

bm25_feature

テキスト関連性特徴量

単語頻度設定ファイル term_doc_freq_file

custom_feature

カスタムオペレーター

オペレーター設定ファイル operator_lib_file

出力テーブルの作成

DataWorks で、PyOdps3 ノードを作成し、次のスクリプトを実行します。このスクリプトは fg.json を読み取り、出力テーブルと後続の実行に必要なリソースを作成します。

from pyfg105 import run_on_odps

fg_task = run_on_odps.FgTask(
    args['input_table'], 
    args['output_table'], 
    args['fg_json_file'], 
    args['partition_value'],
    force_delete_output_table=True,
    force_update_resource=True)
fg_task.create_output_table(o)

スクリプトを実行する前に、スケジューリング設定で次のパラメーターを設定してください: input_tableoutput_tablefg_json_file、および partition_value

fg_task.run(o) も、出力テーブルが存在しない場合に自動的に作成しますが、このメソッドを呼び出して事前に出力テーブルを作成することをお勧めします。これにより、データを並行してバックフィルする際の競合やタスクの失敗を防ぐことができます。

FG オフラインタスクの実行

DataWorks で PyOdps3 ノードを作成し、次のスクリプトを実行します。このスクリプトは特徴量生成タスクを実行し、出力テーブルが存在しない場合は自動的に作成します。

from pyfg105 import run_on_odps

fg_task = run_on_odps.FgTask(
    args['input_table'], 
    args['output_table'], 
    args['fg_json_file'], 
    args['partition_value'],
    batch_size=128,
    force_delete_output_table=False,
    force_update_resource=False)
fg_task.add_sql_setting('odps.stage.mapper.split.size', 256)
fg_task.run(o)

スクリプトを実行する前に、スケジューリング設定で次のパラメーターを設定します: input_tableoutput_tablefg_json_file、および partition_value

PyODPS がインストールされている場合は、pyfg をインストールしてローカルでタスクを送信することもできます。

パラメーター

パラメーター

デフォルト

説明

input_table

None

入力テーブル。

output_table

None

出力テーブル。存在しない場合は自動的に作成されます。

fg_json_file

None

FG 設定ファイル (JSON 形式)。

partition_value

None

処理する入力テーブルのパーティション。結果は出力テーブルの対応するパーティションに書き込まれます。

schema

None

MaxCompute スキーマ。詳細については、「スキーマ操作」をご参照ください。

batch_size

128

各バッチで処理するレコード数。

memory

1024

タスクノードに割り当てるメモリ量 (MiB 単位)。

force_delete_output_table

False

True に設定すると、システムはタスクを実行する前に出力テーブルを削除します。

force_update_resource

False

True に設定すると、システムはタスクを実行する前にリソースを更新します。同時実行の競合を防ぐため、このパラメーターを True に設定したままにしないでください。

output_merged_str

False

True に設定すると、文字列が自動的にマージされ、RTP 形式の大きな文字列特徴量が出力されます。

debug

False

True に設定すると、タスクはデバッグモードで実行され、すべての更新されたリソースの内容が出力されます。

sql_setting

None

MaxCompute SQL パラメーター。 fg_task.add_sql_setting メソッドを使用して設定します。 詳細については、「フラグパラメーター」をご参照ください。 複数のフラグを追加できます。

fg_setting

None

FG パラメーターは、fg_task.add_fg_setting メソッドを使用して設定します。 詳細については、「[グローバル設定](summary.md#id9)」をご参照ください。 複数の設定項目を追加できます。 v0.4.0 以降で利用可能です。

例に示すように、FgTask コンストラクタにパラメーターを渡すことで、デフォルトのパラメーター値を上書きできます。

仕組み

pyfg パッケージは、専用リソースグループ内のゲートウェイマシン上で実行され、MaxCompute に SQL タスクを送信します。または、pyfg と PyODPS の両方をローカルマシンにインストールして、タスクを送信することもできます。

SQL タスク内のカスタム UDF には、FG 共有ライブラリ、設定ファイル (fg.json、辞書、カスタムオペレーターライブラリなど)、UDF コードファイル (.py) などのリソースが必要です。これらのリソースはすべて MaxCompute クラスターにアップロードし、その分散ファイルシステムに保存する必要があります。タスクが実行されると、各ワーカーは分散ファイルシステムから必要なリソースをダウンロードし、メモリにロードします。

FG 共有ライブラリや UDF コードファイルなど、一部のリソースは複数のタスクで共有されます。force_update_resource=True の場合、システムは新しいリソースをアップロードする前に元のリソースを削除します。このプロセスでは、実行中の他のタスクを中断させる可能性のあるタイムウィンドウが発生します。