Todos os produtos
Search
Central de documentação

MaxCompute:Uso de pacotes e imagens de terceiros

Última atualização: Jun 26, 2026

O MaxFrame oferece duas formas de incluir dependências externas em seus jobs Python: enviar um pacote de terceiros como recurso Archive ou especificar uma imagem integrada que já contenha as bibliotecas necessárias.

Consulte a tabela abaixo para escolher a abordagem mais adequada:

Abordagem

Quando usar

Pacote de terceiros

Ideal quando você precisa de uma versão específica de biblioteca ou de um pacote personalizado indisponível no ambiente padrão. Envie o pacote uma única vez e referencie-o por função com @with_resource_libraries.

Imagem

Recomendado para jobs que dependem de várias bibliotecas pré-instaladas (como a imagem integrada scipy, por exemplo). Defina a imagem no nível da sessão para que todas as funções desse job a utilizem automaticamente.

Pré-requisitos

Antes de começar, verifique se você possui:

  • Um projeto MaxCompute com as permissões necessárias para criar recursos

  • O cliente local do MaxFrame instalado e configurado

  • Seu AccessKey ID e AccessKey secret armazenados como variáveis de ambiente: ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET

Uso de um pacote de terceiros

Etapa 1: Enviar o pacote

Envie seu pacote para o MaxCompute como um recurso Archive antes de referenciá-lo no código. Há dois métodos disponíveis.

Método 1: Envio via ODPS SDK

import os
from odps import ODPS

o = ODPS(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='<your-project>',
    endpoint='<your-endpoint>',
)
# Replace packages.tar.gz with the path and filename of your package.
o.create_resource("packages.tar.gz", "archive", fileobj=open("packages.tar.gz", "rb"))

Espaço reservado

Descrição

<your-project>

Nome do seu projeto MaxCompute

<your-endpoint>

URL do endpoint do MaxCompute

Para obter mais informações sobre como empacotar uma biblioteca de terceiros para envio, consulte Criar um pacote de terceiros para PyODPS .

Método 2: Envio via DataWorks

Consulte Criar e usar recursos do MaxCompute.

Etapa 2: Referenciar o pacote no código

Importe with_resource_libraries de maxframe.udf e aplique-o como decorador nas funções que utilizam o pacote.

from maxframe.udf import with_resource_libraries

@with_resource_libraries("packages.tar.gz", "demo.py")
def my_function(v):
    # Import the library from the referenced package.
    import some_library
    return some_library.process(v)

Passe o nome do arquivo de recurso (conforme enviado ao MaxCompute) como argumento. O decorador aceita vários nomes de recursos, incluindo arquivos .py. Para mais detalhes sobre o empacotamento automático, consulte Serviço de empacotamento automático.

Exemplo: Calcular PSI com um pacote de terceiros

Este exemplo utiliza packages.tar.gz para calcular o Population Stability Index (PSI) de uma coluna em uma tabela de teste.

Baixe o pacote de amostra em packages.tar.gz.

1. Crie a tabela de teste e insira dados de amostra.

CREATE TABLE test_float_col (col1 double);
INSERT INTO test_float_col VALUES (3.75),(2.51);

2. Escreva o job do MaxFrame e salve-o como demo.py.

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

# Reference the third-party package.
@with_resource_libraries("packages.tar.gz")
def my_psi(v):
    from scipy.special import psi
    return float(psi(v))

o = ODPS(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='<your-project>',
    endpoint='<your-endpoint>',
)
# Create a MaxFrame session.
session = new_session(o)
df = md.read_odps_table('test_float_col')
# Run the UDF and print results.
print(df.col1.map(my_psi).execute().fetch())

3. Execute o script usando o cliente local do MaxFrame.

python demo.py

Saída esperada:

0    1.182537
1    0.708048
Name: col1, dtype: float64

Uso de uma imagem

Defina odps.session.image em config.options.sql.settings para especificar uma imagem integrada para o job. Todas as funções na sessão executarão no ambiente dessa imagem.

Exemplo: Calcular PSI com a imagem scipy

Este exemplo usa a imagem integrada scipy para calcular o PSI de uma coluna em uma tabela de teste.

1. Crie a tabela de teste e insira dados de amostra.

CREATE TABLE test_float_col (col1 double);
INSERT INTO test_float_col VALUES (3.75),(2.51);

2. Escreva o job do MaxFrame e salve-o como demo.py.

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

# Specify the built-in scipy image for this session.
config.options.sql.settings = {
    "odps.session.image": "scipy"
}

def my_psi(v):
    from scipy.special import psi
    return float(psi(v))

o = ODPS(
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
    project='<your-project>',
    endpoint='<your-endpoint>',
)
# Create a MaxFrame session.
session = new_session(o)
df = md.read_odps_table('test_float_col')
# Run the function and print results.
print(df.col1.map(my_psi).execute().fetch())

3. Execute o script usando o cliente local do MaxFrame.

python demo.py

Saída esperada:

0    1.182537
1    0.708048
Name: col1, dtype: float64

Próximos passos