Todos os produtos
Search
Central de documentação

MaxCompute:Casos de uso

Última atualização: Jul 17, 2026

O MaxCompute oferece suporte a funções definidas pelo usuário (UDFs), PyODPS e MaxFrame para desenvolvimento de jobs. Utilize imagens para incluir pacotes Python de terceiros, como pandas e SciPy, em seus jobs de UDF, PyODPS e MaxFrame.

Uso de imagens em SQL UDFs

O exemplo a seguir cria uma UDF baseada em pandas que soma os valores de duas colunas.

  1. Escreva um script de UDF Python e salve-o como o arquivo sum_pandas.py. Exemplo de código:

    from odps.udf import annotate
    import pandas as pd
    
    @annotate("string, string -> string")
    class SumColumns(object):
        def evaluate(self, arg1, arg2):
            # Convert the input arguments to a pandas DataFrame.
            df = pd.DataFrame({'col1': arg1.split(','), 'col2': arg2.split(',')})
    
            # Process the data by using pandas.
            # This example calculates the sum of two columns.
            df['sum'] = df['col1'].astype(int) + df['col2'].astype(int)
    
            # Convert the result to a string and return it.
            result = ','.join(df['sum'].astype(str).values)
            return result
  2. Carregue o script sum_pandas.py como recurso no seu projeto MaxCompute. Para mais informações, consulte Adicionar resources. O comando de exemplo a seguir demonstra como carregar o script:

    ADD PY sum_pandas.py -f;
  3. Registre o script sum_pandas.py carregado como a função definida pelo usuário SumColumns. Para mais detalhes, consulte Registrar uma função. O comando abaixo ilustra o registro da função:

    CREATE FUNCTION SumColumns AS 'sum_pandas.SumColumns' USING 'sum_pandas.py';
  4. Crie uma tabela de teste chamada testsum e insira dados de teste.

    CREATE TABLE testsum (col1 string, col2 string);
    INSERT INTO testsum VALUES ('1,2,3','1,2,3'),('1,2,3','3,2,1'),('1,2,3','4,5,6');
  5. Chame a UDF e especifique uma imagem existente usando uma flag.

    set odps.sql.python.version=cp37;
    set odps.session.image = <image_name>;
    SELECT SumColumns(col1,col2) AS result FROM testsum;

    Resultado retornado:

    +------------+
    | result     |
    +------------+
    | 2,4,6      |
    | 4,4,4      |
    | 5,7,9      |
    +------------+

Uso de imagens no PyODPS

Este exemplo usa uma imagem para chamar a função psi do pacote SciPy em um job PyODPS.

  1. Crie uma tabela de teste chamada test_float_col e insira dados de teste.

    CREATE TABLE test_float_col (col1 double);
    INSERT INTO test_float_col VALUES (3.75),(2.51);
  2. Escreva um script PyODPS para calcular o valor de psi(col1), salve-o como psi_col.py e execute o arquivo. Exemplo de código:

    import os
    from odps import ODPS, options
    
    def my_psi(v):
        from scipy.special import psi
    
        return float(psi(v))
    
    # If the project has isolation enabled, the following option is not required.
    options.sql.settings = {"odps.isolation.session.enable": True}
    
    o = ODPS(
          # Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set to your AccessKey ID,
          # and the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set to your AccessKey secret.
          # We recommend that you do not hardcode your AccessKey ID and AccessKey secret in the code.
          os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
          os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
          project='your-default-project',
          endpoint='your-end-point'
    )
    
    df = o.get_table("test_float_col").to_df()
    # Execute the job and retrieve the result.
    df.col1.map(my_psi).execute(image='scipy')
    # Save the result to another table.
    df.col1.map(my_psi).persist("result_table", image='scipy')

    Descrição dos parâmetros:

    • ALIBABA_CLOUD_ACCESS_KEY_ID: Defina esta variável de ambiente com um AccessKey ID que tenha as permissões do MaxCompute necessárias nos objetos do projeto MaxCompute de destino. Para obter um AccessKey ID, acesse a página AccessKey Management.

    • ALIBABA_CLOUD_ACCESS_KEY_SECRET: Defina esta variável de ambiente com o AccessKey secret correspondente ao AccessKey ID.

    • your-default-project: Nome do seu projeto MaxCompute. Para visualizar o nome do projeto, faça login no console do MaxCompute e escolha Workspace > Projects no painel de navegação à esquerda.

    • your-end-point: Endpoint da região onde reside o seu projeto MaxCompute. Selecione um endpoint conforme o tipo de conexão de rede, por exemplo, http://service.cn-chengdu.maxcompute.aliyun.com/api. Para mais informações, consulte Endpoints.

  3. Visualize os resultados na tabela result_table.

    SELECT * FROM result_table

    Resultado retornado:

    +------------+
    | col1       |
    +------------+
    | 1.1825373886117962 |
    | 0.7080484451910534 |
    +------------+

Uso de imagens no MaxFrame

O exemplo a seguir usa uma imagem para chamar a função psi do pacote SciPy em um job MaxFrame.

  1. Crie uma tabela de teste chamada test_float_col e insira dados de teste.

    CREATE TABLE test_float_col (col1 double);
    INSERT INTO test_float_col VALUES (3.75),(2.51);
  2. Escreva um script MaxFrame para calcular o valor de psi(col1), salve-o como psi_col.py e execute o arquivo. Exemplo de código:

    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
    
    # Reference the built-in SciPy image.
    config.options.sql.settings = {
        "odps.session.image": "scipy"
    }
    def my_psi(v):
        from scipy.special import psi
        return float(psi(v))
    
    o = ODPS(
          # Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set to your AccessKey ID,
          # and the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set to your AccessKey secret.
          # We recommend that you do not hardcode your AccessKey ID and AccessKey secret in the code.
          os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
          os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
          project='your-default-project',
          endpoint='your-end-point'
    )
    
    # Create a MaxFrame session.
    session = new_session(o)
    df = md.read_odps_table('test_float_col')
    
    # Execute the job and retrieve the result.
    print(df.col1.map(my_psi).execute().fetch())

    Descrição dos parâmetros:

    • ALIBABA_CLOUD_ACCESS_KEY_ID: Defina esta variável de ambiente com um AccessKey ID que tenha as permissões do MaxCompute necessárias nos objetos do projeto MaxCompute de destino. Para obter um AccessKey ID, acesse a página AccessKey Management.

    • ALIBABA_CLOUD_ACCESS_KEY_SECRET: Defina esta variável de ambiente com o AccessKey secret correspondente ao AccessKey ID.

    • your-default-project: Nome do seu projeto MaxCompute. Para visualizar o nome do projeto, faça login no console do MaxCompute e escolha Workspace > Projects no painel de navegação à esquerda.

    • your-end-point: Endpoint da região onde reside o seu projeto MaxCompute. Selecione um endpoint conforme o tipo de conexão de rede, por exemplo, http://service.cn-chengdu.maxcompute.aliyun.com/api. Para mais informações, consulte Endpoints.

    Resultado retornado:

    0    1.182537
    1    0.708048
    Name: col1, dtype: float64