Todos os produtos
Search
Central de documentação

:Use FG in MaxCompute tasks

Última atualização: Jun 28, 2026

Um job do MaxCompute PyFG (Python Feature Generation) gera features complexas em lotes offline. Ele oferece suporte a tipos de dados complexos do ODPS 2.0, incluindo list, map, float e int. O job utiliza um arquivo de configuração e parâmetros de linha de comando para determinar se as features geradas devem ser agrupadas em bins.

Método 1: Usar uma imagem de grupo de recursos de uso geral

No console do DataWorks, acesse Scheduling Configuration > Resource Properties. Selecione um grupo de recursos de uso geral e escolha a versão mais recente da imagem dataworks_pairec_task_pod.

Nota: A liberação da imagem dataworks_pairec_task_pod pode ocorrer com atraso em relação às atualizações do pyfg. Portanto, a imagem pode não conter o pacote pyfg mais recente. Para verificar a versão necessária, consulte o script gerado por Personalização da solução recomendada - Configuração de features. Para utilizar a versão mais recente do pyfg, siga o Método 3 e crie uma imagem personalizada para o seu grupo de recursos.

Método 2: Instalar dependências (para versões anteriores do DataWorks)

Faça login no console do DataWorks, crie um grupo de recursos exclusivo para agendamento e utilize o O&M Assistant para instalar o pacote pyfg.

Para instalar o pacote pyfg no seu grupo de recursos exclusivo do DataWorks, acesse DataWorks->Management Center->Resource Group List->O&M Assistant e execute o seguinte comando:

/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

Perguntas frequentes

Se você encontrar o seguinte erro:

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)

Esse erro ocorre porque a versão do pyodps no grupo de recursos exclusivo atual está desatualizada. Atualize-a para a versão mais recente, juntamente com o pacote correspondente pyodpswrapper. No entanto, essa ação pode alterar as versões de outros pacotes no ambiente python e causar falhas nas suas tarefas python. A abordagem mais segura é utilizar uma imagem personalizada para o seu grupo de recursos (Método 3).

Método 3: Personalizar uma imagem de grupo de recursos (para novas versões do DataWorks)

Para obter instruções, consulte Imagens personalizadas.

Carregar arquivos de recursos

Carregue o arquivo de configuração do FG (no formato JSON) no seu projeto do MaxCompute.

Alguns operadores de features exigem arquivos de recursos adicionais. Carregue manualmente esses arquivos no seu projeto do MaxCompute.

Operador de feature

Descrição

Parâmetro do arquivo de recurso

text_normalizer

Normalização de texto

Arquivo de stop words stop_char_file

tokenize_feature

Feature de tokenização de texto

Arquivo de configuração de vocabulário vocab_file

bm25_feature

Feature de relevância de texto

Arquivo de configuração de frequência de termos term_doc_freq_file

custom_feature

Operador personalizado

Arquivo de configuração do operador operator_lib_file

Criar a tabela de saída

No DataWorks, crie um nó PyOdps3 e execute o script a seguir. O script lê o arquivo fg.json, cria a tabela de saída e os recursos necessários para execuções subsequentes.

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)

Antes de executar o script, configure os seguintes parâmetros em Scheduling Configuration: input_table, output_table, fg_json_file e partition_value.

Embora o método fg_task.run(o) também crie a tabela de saída automaticamente caso ela não exista, recomendamos chamar este método para criar a tabela antecipadamente. Isso ajuda a evitar conflitos e falhas de tarefa ao realizar backfill de dados simultaneamente.

Executar a tarefa offline do FG

No DataWorks, crie um nó PyOdps3 e execute o script a seguir. Este script executa a tarefa de geração de features e cria automaticamente a tabela de saída, caso ela ainda não exista.

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)

Antes de executar o script, configure os seguintes parâmetros em Scheduling Configuration: input_table, output_table, fg_json_file e partition_value.

Caso tenha o PyODPS instalado, você também pode instalar o pyfg e enviar tarefas localmente.

Parâmetros

Parâmetro

Padrão

Descrição

input_table

None

A tabela de entrada.

output_table

None

A tabela de saída. Criada automaticamente se não existir.

fg_json_file

None

O arquivo de configuração do FG, no formato JSON.

partition_value

None

A partição da tabela de entrada a ser processada. Os resultados são gravados na partição correspondente da tabela de saída.

schema

None

O schema do MaxCompute. Para mais informações, consulte operações de schema.

batch_size

128

O número de registros a serem processados em cada lote.

memory

1024

A quantidade de memória a ser alocada para o nó da tarefa, em MiB.

force_delete_output_table

False

Se definido como True, o sistema exclui a tabela de saída antes de executar a tarefa.

force_update_resource

False

Se definido como True, o sistema atualiza os recursos antes de executar a tarefa. Para evitar conflitos de concorrência, evite manter este parâmetro definido como True.

output_merged_str

False

Se definido como True, as strings são mescladas automaticamente para gerar uma feature de string grande no formato RTP.

debug

False

Se definido como True, a tarefa é executada em modo de depuração e imprime o conteúdo de todos os recursos atualizados.

sql_setting

None

Parâmetros SQL do MaxCompute. Utilize o método fg_task.add_sql_setting para configurá-los. Para mais informações, consulte Parâmetros de flag. É possível adicionar múltiplas flags.

fg_setting

None

Parâmetros do FG. Utilize o método fg_task.add_fg_setting para configurá-los. Para mais informações, consulte Configuração global. Vários itens de configuração podem ser adicionados. Disponível desde a v0.4.0.

É possível substituir os valores padrão dos parâmetros passando-os ao construtor FgTask, conforme demonstrado nos exemplos.

Como funciona

O pacote pyfg é executado em uma máquina gateway dentro de um grupo de recursos exclusivo para enviar tarefas SQL ao MaxCompute. Alternativamente, instale tanto o pyfg quanto o PyODPS em uma máquina local para enviar tarefas.

UDFs personalizadas em uma tarefa SQL requerem recursos como a biblioteca compartilhada do FG, arquivos de configuração (por exemplo, fg.json, dicionários e bibliotecas de operadores personalizados) e os arquivos de código da UDF (.py). Todos esses recursos devem ser carregados no cluster do MaxCompute e armazenados em seu sistema de arquivos distribuído. Durante a execução da tarefa, cada worker baixa os recursos necessários do sistema de arquivos distribuído e os carrega na memória.

Alguns recursos, como a biblioteca compartilhada do FG e os arquivos de código da UDF, são compartilhados entre várias tarefas. Quando force_update_resource=True, o sistema exclui os recursos originais antes de carregar os novos. Esse processo cria uma janela de tempo que pode interromper outras tarefas em execução.