Todos los productos
Search
Centro de documentos

Realtime Compute for Apache Flink:Python

Última actualización: Sep 03, 2026

Realtime Compute for Apache Flink admite funciones definidas por el usuario (UDF) de Python en trabajos de Flink SQL. Puede crear funciones escalares, de agregación y de tabla en Python, gestionar dependencias de Python y ajustar el rendimiento de las UDF.

Tipos de funciones definidas por el usuario

Categoría

Descripción

Función escalar definida por el usuario (UDSF)

Una UDSF asigna cero, uno o más valores escalares a un nuevo valor escalar. Procesa una fila de entrada para generar un valor de salida y crea una asignación de uno a uno. Para obtener más información, consulte User-defined scalar functions (UDSFs).

Función de agregación definida por el usuario (UDAF)

Una UDAF agrega varios registros en un solo registro y genera una asignación de muchos a uno. Para obtener más información, consulte User-defined aggregate functions (UDAFs).

Función de tabla definida por el usuario (UDTF)

Una UDTF acepta cero, uno o más valores escalares como parámetros de entrada. A diferencia de una función escalar, una función de tabla puede devolver cualquier número de filas, cada una compuesta por una o más columnas. Para obtener más información, consulte User-defined table functions (UDTFs).

Uso de dependencias de Python

Los clústeres de Realtime Compute for Apache Flink incluyen paquetes comunes de Python preinstalados, como Pandas, NumPy y PyArrow. Para consultar la lista de paquetes de Python de terceros preinstalados, revise Develop Python jobs. Importe estos paquetes en su función antes de usarlos, como se muestra en el siguiente ejemplo.

@udf(result_type=DataTypes.FLOAT())
def percentile(values: List[float], percentile: float):
    import numpy as np
    return np.percentile(values, percentile)

Para usar un paquete de Python de terceros que no esté preinstalado, cárguelo como archivo de dependencia cuando registre la UDF de Python. Para obtener más información, consulte Manage user-defined functions (UDFs) y Use Python dependencies.

Depuración de código

Use el módulo logging para generar información de registro desde su función definida por el usuario de Python y facilitar la solución de problemas. El siguiente ejemplo muestra cómo usar logging.

@udf(result_type=DataTypes.BIGINT())
def add(i, j):    
  logging.info("hello world")    
  return i + j

Una vez generados los registros, puede consultarlos en los archivos de registro de TaskManager. Para obtener más información, consulte View run logs.

Ajuste de rendimiento

Precarga de recursos

Precargue los recursos durante la inicialización de la función para evitar recargarlos en cada llamada al método eval. Por ejemplo, cargue un modelo grande de aprendizaje profundo una sola vez y luego ejecute predicciones por lotes sobre él.

from pyflink.table import DataTypes
from pyflink.table.udf import ScalarFunction, udf

class Predict(ScalarFunction):
    def open(self, function_context):
        import pickle

        with open("resources.zip/resources/model.pkl", "rb") as f:
            self.model = pickle.load(f)

    def eval(self, x):
        return self.model.predict(x)

predict = udf(Predict(), result_type=DataTypes.DOUBLE(), func_type="pandas")
Nota

Para obtener información sobre cómo cargar archivos de datos de Python, consulte Use Python dependencies.

Funciones definidas por el usuario asíncronas

Para escenarios con uso intensivo de E/S, como el acceso a bases de datos externas o llamadas a servicios HTTP, utilice funciones definidas por el usuario asíncronas. Una sola instancia de función puede manejar varias solicitudes simultáneamente; esto distribuye el tiempo de espera entre múltiples llamadas y mejora significativamente el throughput del trabajo. Esta función solo es compatible con VVR 11.7 y versiones posteriores, y aplica únicamente a funciones escalares definidas por el usuario (UDSF). Para más detalles, consulte Asynchronous user-defined functions.

Uso de la biblioteca Pandas

Además de las funciones definidas por el usuario estándar de Python, Realtime Compute for Apache Flink admite funciones definidas por el usuario de Pandas. Estas funciones aceptan estructuras de datos de Pandas, como pandas.Series y pandas.DataFrame, como entrada, lo que le permite aprovechar bibliotecas de alto rendimiento como Pandas y NumPy. Para obtener más información, consulte Funciones definidas por el usuario vectorizadas.

Parámetros

El rendimiento de una función definida por el usuario de Python depende en gran medida de su implementación. Si experimenta problemas de rendimiento, optimice primero la lógica de la función. Los siguientes parámetros también afectan el rendimiento.

Parámetro

Descripción

python.fn-execution.bundle.size

Las UDF de Python se ejecutan de forma asíncrona. El operador de Java almacena datos en caché antes de enviarlos a un proceso de Python para su ejecución. Cuando la caché alcanza un umbral, los datos se envían al proceso de Python. El parámetro python.fn-execution.bundle.size controla el número máximo de registros que se pueden almacenar en caché.

El valor predeterminado es 100,000 registros.

python.fn-execution.bundle.time

Este parámetro controla el tiempo máximo de almacenamiento en caché. Los datos almacenados se envían para su procesamiento cuando el recuento de registros alcanza el umbral de python.fn-execution.bundle.size o cuando el tiempo de almacenamiento en caché alcanza el umbral de python.fn-execution.bundle.time.

El valor predeterminado es 1,000 milisegundos.

python.fn-execution.arrow.batch.size

Para las UDF de Pandas, este parámetro especifica el número máximo de registros que puede contener un lote de Arrow. El valor predeterminado es 10,000.

Nota

El valor del parámetro python.fn-execution.arrow.batch.size no puede ser mayor que el valor del parámetro python.fn-execution.bundle.size.

Nota

Establecer estos parámetros en valores excesivamente grandes puede ser contraproducente. Un búfer excesivo durante un checkpoint puede provocar que los checkpoints tarden demasiado o fallen. Para obtener más información sobre estos parámetros, consulte Configuración.

Temas relacionados