Todos los productos
Search
Centro de documentos

MaxCompute:Creación de un objeto DataFrame

Última actualización: Sep 03, 2026

PyODPS ofrece una API de DataFrame para procesar datos estructurados en MaxCompute. Un objeto DataFrame permite referenciar cuatro tipos de orígenes de datos (tablas de MaxCompute, particiones de MaxCompute, DataFrames de Pandas y tablas de SQLAlchemy) mediante la misma interfaz. Cambie entre orígenes de datos al modificar la entrada, sin necesidad de reescribir su lógica de procesamiento. Esto facilita el desarrollo y las pruebas locales del código con Pandas para luego ejecutar la misma lógica a gran escala en MaxCompute.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

  • La tabla de ejemplo pyodps_iris disponible en su proyecto de MaxCompute. Para obtener instrucciones de configuración, consulte Use DataFrame to process data.

Conceptos clave

El objeto DataFrame de PyODPS es el único objeto Collection que debe crear manualmente. Los tres tipos de objetos principales son:

Object

Structure

Description

Collection (DataFrame)

Bidimensional

Representa una tabla completa

Sequence

Unidimensional

Representa una sola columna

Scalar

Valor único

Representa un objeto escalar

Evaluación diferida: Un DataFrame construido a partir de una tabla de MaxCompute no carga los datos reales, sino que conserva una representación de las operaciones por ejecutar. MaxCompute ejecuta dichas operaciones y almacena los resultados únicamente cuando se desencadena el cálculo. Por el contrario, un DataFrame creado a partir de un DataFrame de Pandas mantiene los datos reales en memoria.

Referencia rápida de orígenes de datos

Los cuatro métodos de creación utilizan el mismo constructor DataFrame(source). La única diferencia radica en el valor que se pasa como source.

Data source

Method

Typical use

Tabla de MaxCompute

DataFrame(o.get_table(...)) o .to_df()

Procesamiento de datos en producción

Partición de MaxCompute

DataFrame(o.get_table(...).get_partition(...)) o .to_df()

Procesamiento acotado a una partición

DataFrame de Pandas

DataFrame(pandas_df)

Pruebas y desarrollo local

Tabla de SQLAlchemy

DataFrame(sqlalchemy_table)

Acceso a tablas de base de datos

Creación de un objeto DataFrame a partir de una tabla de MaxCompute

Pase el objeto de tabla directamente a DataFrame o invoque to_df() sobre la tabla.

from odps.df import DataFrame

# Method 1: Pass the table object to DataFrame
iris = DataFrame(o.get_table('pyodps_iris'))

# Method 2: Use the to_df method on the table
iris2 = o.get_table('pyodps_iris').to_df()

Ambos métodos generan objetos DataFrame equivalentes con el mismo esquema.

Creación de un objeto DataFrame a partir de una partición de MaxCompute

Pase un objeto de partición a DataFrame o invoque to_df() sobre la partición.

from odps.df import DataFrame

# Create a partitioned table if one does not already exist
o.create_table('partitioned_table', ('num bigint, num2 double', 'pt string'), if_not_exists=True)

# Method 1: Pass the partition object to DataFrame
pt_df = DataFrame(o.get_table('partitioned_table').get_partition('pt=20171111'))

# Method 2: Use the to_df method on the partition
pt_df2 = o.get_table('partitioned_table').get_partition('pt=20171111').to_df()

Creación de un objeto DataFrame a partir de un DataFrame de Pandas

Pase el DataFrame de Pandas al constructor DataFrame.

from odps.df import DataFrame
import pandas as pd
import numpy as np

df = DataFrame(pd.DataFrame(np.arange(9).reshape(3, 3), columns=list('abc')))

Inferencia de tipos de datos

Al convertir un DataFrame de Pandas, PyODPS infiere los tipos de datos automáticamente. Utilice los siguientes parámetros para controlar la resolución de tipos cuando la inferencia falla o produce resultados incorrectos:

Parameter

Type

Description

unknown_as_string

bool

Si es True, convierte las columnas con tipos no reconocibles (incluidas las vacías) a string en lugar de generar un error

as_type

dict

Establezca explícitamente el tipo de dato para una o más columnas; es obligatorio para las columnas de tipo list y dict, ya que PyODPS no puede inferirlas automáticamente

Ejemplo 1: Resolución de una columna vacía y anulación de un tipo de dato

df2 = DataFrame(df, unknown_as_string=True, as_type={'null_col2': 'float'})
print(df2.dtypes)

Salida:

odps.Schema {
  sepallength           float64
  sepalwidth            float64
  petallength           float64
  petalwidth            float64
  name                  string
  null_col1             string   # unknown_as_string=True converted this to string
  null_col2             float64  # as_type forced this to float
}

Ejemplo 2: Definición del tipo para una columna de lista

PyODPS no infiere tipos para columnas de tipo list o dict. Configure as_type con un diccionario que asigne los nombres de las columnas a sus tipos correspondientes.

df4 = DataFrame(df3, as_type={'list_col': 'list<int64>'})
print(df4.dtypes)

Salida:

odps.Schema {
  id        int64
  list_col  list<int64>  # as_type is required for list and dict columns
}
PyODPS no admite la carga de tablas externas de Object Storage Service (OSS) o Tablestore a MaxCompute.

Creación de un objeto DataFrame a partir de una tabla de SQLAlchemy

Conecte SQLAlchemy a su proyecto de MaxCompute y pase el objeto de tabla a DataFrame. Para consultar los parámetros de conexión, revise Connect SQLAlchemy to a MaxCompute project.

import os
from odps.df import DataFrame
import sqlalchemy

# Build the connection string using environment variables for your AccessKey credentials.
# Set ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET before running this code.
conn_string = 'odps://%s:%s@<project>/?endpoint=<endpoint>' % (
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_ID'),
    os.getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET')
)

engine = sqlalchemy.create_engine(conn_string)
metadata = sqlalchemy.MetaData(bind=engine)  # Bind metadata to the engine
table = sqlalchemy.Table('pyodps_iris', metadata, extend_existing=True, autoload=True)

iris = DataFrame(table)

Pasos siguientes

Una vez creado el objeto DataFrame, ejecute operaciones de datos mediante la API de DataFrame de PyODPS. Para consultar las operaciones disponibles, revise Use DataFrame to process data.