Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Dataflow se basa en el proyecto de código abierto de Apache Beam. En este documento, se describe el modelo de programación de Apache Beam.
Descripción general
Apache Beam es un modelo unificado de código abierto para definir canalizaciones por lotes y de transmisión. El modelo de programación de Apache Beam simplifica la mecánica del procesamiento de datos a gran escala. Con uno de los SDK de Apache Beam, puedes compilar un programa que define la canalización. Luego, ejecuta la canalización en una plataforma específica como Dataflow. Este modelo te permite concentrarte en la composición lógica de los trabajos de procesamiento de datos en lugar de en la administración física del procesamiento paralelo.
Apache Beam te aísla de los detalles de bajo nivel del procesamiento distribuido, como la coordinación de trabajadores individuales, la fragmentación de conjuntos de datos y otras tareas similares. Dataflow administra completamente estos detalles de bajo nivel.
Una canalización es un grafo de transformaciones que se aplican a colecciones de datos. En Apache Beam, una colección se llama PCollection, y una transformación se llama PTransform. Una PCollection puede estar delimitada o no.
Un PCollectiondelimitado tiene un tamaño fijo y conocido, y se puede procesar mediante una canalización por lotes. La PCollections no delimitada debe usar una canalización de transmisión, ya que los datos se procesan a medida que llegan.
Apache Beam proporciona conectores para leer y escribir en diferentes sistemas, incluidos los servicios de Google Cloud y las tecnologías de terceros, como Apache Kafka.
En el siguiente diagrama, se muestra una canalización de Apache Beam.
Puedes escribir PTransforms que realice una lógica arbitraria. Los SDK de Apache Beam también proporcionan una biblioteca de PTransforms útil lista para usar, que incluye lo siguiente:
Filtra todos los elementos que no cumplan con un predicado.
Aplica una función de asignación uno a uno sobre cada elemento.
Agrupa elementos por clave.
Cómo contar los elementos de una colección
Cuenta los elementos asociados con cada clave en una colección de clave-valor.
Para ejecutar una canalización de Apache Beam con Dataflow, sigue estos pasos:
Usar el SDK de Apache Beam para definir y compilar la canalización. Como alternativa, puedes implementar una canalización compilada previamente con una plantilla de Dataflow.
Usa Dataflow para ejecutar la canalización. Dataflow asigna un grupo de VM para ejecutar el trabajo, implementa el código en las VM y organiza el trabajo.
Dataflow realiza optimizaciones en el backend para que la canalización se ejecute de manera eficiente y aproveche la paralelización.
Mientras se ejecuta un trabajo y después de que se completa, usa las capacidades de administración de Dataflow para supervisar el progreso y solucionar problemas.
Conceptos de Apache Beam
Esta sección contiene resúmenes de conceptos fundamentales.
Conceptos básicos
Canalizaciones
Una canalización encapsula la serie completa de procesamientos que participan en la lectura de los datos de entrada, la transformación de esos datos y la escritura de los datos de salida. La fuente de entrada y el receptor de salida pueden ser del mismo tipo o de tipos diferentes, lo que te permite convertir los datos de un formato en otro con facilidad. Los programas de Apache Beam comienzan por crear un objeto Pipeline y, luego, usan ese objeto como la base para crear los conjuntos de datos de canalización. Cada canalización representa un trabajo único y repetible.
PCollection
Una PCollection representa un conjunto de datos de elementos múltiples que puede distribuirse y que actúa como los datos de la canalización. Las transformaciones de Apache Beam utilizan objetos PCollection como entradas y salidas para cada paso de tu canalización. Una PCollection puede contener un conjunto de datos de un tamaño fijo o un conjunto de datos no delimitado de una fuente de datos que se actualiza continuamente.
Transformaciones
Una transformación representa una operación de procesamiento que transforma datos. Una transformación toma uno o más objetos PCollection como entrada, realiza una operación que especificas en cada elemento de esa colección y produce uno o más objetos PCollection como salida. Una transformación puede realizar casi cualquier tipo de operación de procesamiento, incluidos los cálculos matemáticos de datos, la conversión de datos de un formato a otro, la agrupación de datos, la lectura y escritura de datos, el filtro de datos para mostrar solo aquellos elementos que desees o la combinación de elementos de datos en valores únicos.
ParDo
ParDo es la operación de procesamiento paralelo central de los SDK de Apache Beam, que invoca una función especificada por el usuario en cada uno de los elementos del objeto PCollection de entrada. ParDo recopila los elementos de salida en un objeto PCollection de salida. La transformación ParDo procesa los elementos de forma independiente y también puede hacerlo en paralelo. La función definida por el usuario para un ParDo se denomina DoFn.
E/S de canalización
Los conectores de E/S de Apache Beam te permiten leer datos en tu canalización y escribir datos de salida desde tu canalización. Un conector de E/S consta de una fuente y un receptor. Todas las fuentes y receptores de Apache Beam son transformaciones que permiten que las canalizaciones funcionen con datos de varios formatos de almacenamiento de datos diferentes. También puedes escribir un conector de E/S personalizado.
Agregación
La agregación es el proceso de procesar algunos valores de varios elementos de entrada. El principal patrón de procesamiento para agregación en Apache Beam es agrupar todos los elementos con una clave y ventana comunes. Luego, combina cada grupo de elementos con una operación asociativa y conmutativa.
Funciones definidas por el usuario (UDF)
Algunas operaciones de Apache Beam permiten ejecutar código definido por el usuario para configurar la transformación. Para ParDo, el código definido por el usuario especifica la operación que se aplica a cada elemento, y para Combine, especifica cómo se deben combinar los valores. Una canalización puede contener UDF escritos en un lenguaje diferente del lenguaje del ejecutor. Una canalización también puede contener UDF escritos en varios lenguajes.
Ejecutor
Los ejecutores son software que acepta una canalización y la ejecuta. La mayoría de los ejecutores son traductores o adaptadores para sistemas de procesamiento de macrodatos masivamente paralelos.
Existen otros ejecutores diseñados para las pruebas locales y la depuración.
Origen
Una transformación que lee desde un sistema de almacenamiento externo. Por lo general, una canalización lee datos de entrada de una fuente. La fuente tiene un tipo, que puede ser diferente del tipo de receptor, por lo que puedes cambiar el formato de los datos a medida que se mueven a través de la canalización.
Receptor
Una transformación que escribe en un sistema de almacenamiento de datos externo, como un archivo o una base de datos.
TextIO
Una PTransform para leer y escribir archivos de texto. La fuente y el receptor de TextIO admiten archivos comprimidos con gzip y bzip2. La fuente de entrada de TextIO es compatible con JSON. Sin embargo, para que el servicio de Dataflow pueda paralelizar la entrada y salida, los datos de origen deben delimitarse con un salto de línea.
Puedes usar una expresión regular para orientar archivos específicos con la fuente de TextIO.
Dataflow admite patrones de comodines generales. La expresión glob puede aparecer en cualquier parte de la ruta de acceso del archivo. Sin embargo, Dataflow no admite comodines recurrentes (**).
Conceptos avanzados
Hora del evento
Es el momento en que se produce un evento de datos, que se determina según la marca de tiempo del elemento de datos. Es distinto al momento en que se procesa el elemento real en cualquier etapa de la canalización.
Sistema de ventanas
Los sistemas de ventanas permiten agrupar las operaciones de las colecciones no delimitadas mediante la división de la colección en ventanas de colecciones finitas según las marcas de tiempo de los elementos individuales. Una función analítica le dice al ejecutor cómo asignar elementos a una ventana inicial y cómo combinar ventanas de elementos agrupados.
Apache Beam te permite definir diferentes tipos de ventanas o utilizar las funciones de sistemas de ventanas predefinidas.
Marcas de agua
Apache Beam hace un seguimiento de una marca de agua, que es la noción del sistema de cuándo se puede esperar que todos los datos en una ventana específica hayan llegado a la canalización.
Apache Beam realiza un seguimiento de una marca de agua porque no se garantiza que los datos lleguen en orden de tiempo o en intervalos predecibles a una canalización. Además, no se garantiza que los eventos de datos aparezcan en la canalización en el mismo orden en que se generaron.
Activador
Los activadores determinan cuándo emitir resultados agregados a medida que llegan los datos. Para los datos delimitados, los resultados se emiten después de que se han procesado todas las entradas. Para los datos no delimitados, los resultados se emiten cuando la marca de agua pasa el final de la ventana, lo que indica que el sistema cree que se procesaron todos los datos de entrada para esa ventana. Apache Beam proporciona varios activadores predefinidos que se pueden combinar.
¿Qué sigue?
Para obtener más información sobre los conceptos básicos de compilación de canalizaciones con los SDK de Apache Beam, consulta la Guía de programación de Apache Beam en la documentación de Apache Beam.
Para obtener más detalles sobre las capacidades de Apache Beam compatibles con Dataflow, consulta la matriz de capacidad de Apache Beam.
Apache Beam® es una marca registrada de The Apache Software Foundation o sus afiliados de Estados Unidos y otros países.
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-09-04 (UTC)"],[[["\u003cp\u003eApache Beam is an open-source, unified model for defining both batch and streaming pipelines, simplifying large-scale data processing by allowing users to focus on the logic rather than managing parallel processing.\u003c/p\u003e\n"],["\u003cp\u003eApache Beam pipelines consist of \u003ccode\u003ePCollections\u003c/code\u003e (datasets) and \u003ccode\u003ePTransforms\u003c/code\u003e (operations), where \u003ccode\u003ePCollections\u003c/code\u003e can be bounded (fixed size) or unbounded (continuously updating), processed by batch or streaming pipelines, respectively.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eParDo\u003c/code\u003e is a core parallel processing operation, applying a user-defined function to each element in a \u003ccode\u003ePCollection\u003c/code\u003e, and Apache Beam provides I/O connectors to read data from various sources and write to different sinks, including Google Cloud services.\u003c/p\u003e\n"],["\u003cp\u003eWindowing enables grouping operations over unbounded collections by dividing them into finite windows based on timestamps, and watermarks track when all data in a window is expected, managing out-of-order or delayed data.\u003c/p\u003e\n"],["\u003cp\u003eDataflow can run Apache Beam pipelines, by managing the orchestration, deploying code to the necessary resources, and performing optimizations to make pipeline processing efficient.\u003c/p\u003e\n"]]],[],null,["# Programming model for Apache Beam\n\n\u003cbr /\u003e\n\nDataflow is based on the open-source Apache Beam project. This\ndocument describes the Apache Beam programming model.\n\nOverview\n--------\n\nApache Beam is an open source, unified model for defining both batch and\nstreaming pipelines. The Apache Beam programming model simplifies the\nmechanics of large-scale data processing. Using one of the Apache Beam SDKs,\nyou build a program that defines the pipeline. Then, you execute the pipeline\non a specific platform such as Dataflow. This model lets you\nconcentrate on the logical composition of your data processing job, rather than\nmanaging the orchestration of parallel processing.\n\nApache Beam insulates you from the low-level details of distributed\nprocessing, such as coordinating individual workers, sharding datasets, and\nother such tasks. Dataflow fully manages these low-level details.\n\nA *pipeline* is a graph of transformations that are applied to collections of\ndata. In Apache Beam, a collection is called a `PCollection`, and a\ntransform is called a `PTransform`. A `PCollection` can be bounded or unbounded.\nA *bounded* `PCollection` has a known, fixed size, and can be processed using a\nbatch pipeline. Unbounded `PCollections` must use a streaming pipeline, because\nthe data is processed as it arrives.\n\nApache Beam provides connectors to read from and write to different systems,\nincluding Google Cloud services and third-party technologies such as\nApache Kafka.\n\nThe following diagram shows an Apache Beam pipeline.\n\nYou can write `PTransforms` that perform arbitrary logic. The Apache Beam\nSDKs also provide a library of useful `PTransforms` out of the box, including\nthe following:\n\n- Filter out all elements that don't satisfy a predicate.\n- Apply a 1-to-1 mapping function over each element.\n- Group elements by key.\n- Count the elements in a collection\n- Count the elements associated with each key in a key-value collection.\n\nTo run an Apache Beam pipeline using Dataflow, perform the\nfollowing steps:\n\n1. Use the Apache Beam SDK to define and build the pipeline. Alternatively, you can deploy a prebuilt pipeline by using a Dataflow template.\n2. Use Dataflow to run the pipeline. Dataflow allocates a pool of VMs to run the job, deploys the code to the VMs, and orchestrates running the job.\n3. Dataflow performs optimizations on the backend to make your pipeline run efficiently and take advantage of parallelization.\n4. While a job is running and after it completes, use Dataflow management capabilities to monitor progress and troubleshoot.\n\nApache Beam concepts\n--------------------\n\nThis section contains summaries of fundamental concepts.\n\n### Basic concepts\n\nPipelines\n: A pipeline encapsulates the entire series of computations that are involved in\n reading input data, transforming that data, and writing output data. The input\n source and output sink can be the same type or of different types, letting you\n convert data from one format to another. Apache Beam programs start by\n constructing a `Pipeline` object, and then using that object as the basis for\n creating the pipeline's datasets. Each pipeline represents a single, repeatable\n job.\n\nPCollection\n: A `PCollection` represents a potentially distributed, multi-element dataset that\n acts as the pipeline's data. Apache Beam transforms use\n `PCollection` objects as inputs and outputs for each step in your pipeline. A\n `PCollection` can hold a dataset of a fixed size or an unbounded dataset from a\n continuously updating data source.\n\nTransforms\n: A transform represents a processing operation that transforms data. A\n transform takes one or more `PCollection`s as input, performs an operation that\n you specify on each element in that collection, and produces one or more\n `PCollection`s as output. A transform can perform nearly any kind of processing\n operation, including performing mathematical computations on data, converting\n data from one format to another, grouping data together, reading and writing\n data, filtering data to output only the elements you want, or combining data\n elements into single values.\n\nParDo\n: `ParDo` is the core parallel processing operation in the Apache Beam SDKs,\n invoking a user-specified function on each of the elements of the input\n `PCollection`. `ParDo` collects the zero or more output elements into an output\n `PCollection`. The `ParDo` transform processes elements independently and possibly\n in parallel. The user-defined function for a `ParDo` is called a `DoFn`.\n\nPipeline I/O\n: Apache Beam I/O connectors let you read data into your pipeline and\n write output data from your pipeline. An I/O connector consists of a source and\n a sink. All Apache Beam sources and sinks are transforms that let your\n pipeline work with data from several different data storage formats. You can\n also write a custom I/O connector.\n\nAggregation\n: Aggregation is the process of computing some value from multiple input\n elements. The primary computational pattern for aggregation in Apache Beam\n is to group all elements with a common key and window. Then, it combines each\n group of elements using an associative and commutative operation.\n\nUser-defined functions (UDFs)\n: Some operations within Apache Beam allow executing user-defined code as a\n way of configuring the transform. For `ParDo`, user-defined code specifies the\n operation to apply to every element, and for `Combine`, it specifies how values\n should be combined. A pipeline might contain UDFs written in a different\n language than the language of your runner. A pipeline might also contain UDFs\n written in multiple languages.\n\nRunner\n: Runners are the software that accepts a pipeline and executes it. Most runners are\n translators or adapters to massively parallel big-data processing systems.\n Other runners exist for local testing and debugging.\n\nSource\n: A transform that reads from an external storage system. A pipeline typically reads input data from a source. The source has a type, which may be different from the sink type, so you can change the format of data as it moves through the pipeline.\n\nSink\n: A transform that writes to an external data storage system, like a file or a database.\n\nTextIO\n: A PTransform for reading and writing text files. The TextIO source and sink\n support files compressed with `gzip` and `bzip2`. The TextIO input source\n supports JSON. However, for the Dataflow service to be able to\n parallelize input and\n output, your source data must be delimited with a line feed.\n You can use a regular\n expression to target specific files with the TextIO source.\n Dataflow supports general wildcard patterns. Your glob expression\n can appear anywhere in the path. However, Dataflow does not\n support recursive wildcards (`**`).\n\n### Advanced concepts\n\nEvent time\n: The time a data event occurs, determined by the timestamp on the data\n element itself. This contrasts with the time the actual data element\n gets processed at any stage in the pipeline.\n\nWindowing\n: Windowing enables grouping operations over unbounded collections by dividing\n the collection into windows of finite collections according to the timestamps of\n the individual elements. A windowing function tells the runner how to assign\n elements to an initial window, and how to merge windows of grouped elements.\n Apache Beam lets you define different kinds of windows or use the\n predefined windowing functions.\n\nWatermarks\n: Apache Beam tracks a watermark, which is the system's notion of when all\n data in a certain window can be expected to have arrived in the pipeline.\n Apache Beam tracks a watermark because data is not guaranteed to arrive\n in a pipeline in time order or at predictable intervals. In addition, it's not\n guaranteed that data events will appear in the pipeline in the same order\n that they were generated.\n\nTrigger\n: Triggers determine when to emit aggregated results as data arrives. For\n bounded data, results are emitted after all of the input has been processed. For\n unbounded data, results are emitted when the watermark passes the end of the\n window, indicating that the system believes all input data for that window has\n been processed. Apache Beam provides several predefined triggers and lets\n you combine them.\n\nWhat's next\n-----------\n\n- To learn more about the basic concepts of building pipelines using the Apache Beam SDKs, see the [Apache Beam Programming Guide](https://beam.apache.org/documentation/programming-guide/) in the Apache Beam documentation.\n- For more details about the Apache Beam capabilities supported by Dataflow, see the [Apache Beam capability matrix](https://beam.apache.org/documentation/runners/capability-matrix/).\n\n*Apache Beam® is a registered\ntrademark of The Apache Software Foundation or its affiliates in the United\nStates and/or other countries.*"]]