Canalizaciones

En los SDK de Dataflow, una canalización representa un trabajo de procesamiento de datos. Para crear una canalización, debes escribir un programa con el SDK de Dataflow. Una canalización es un conjunto de operaciones que puede leer una fuente de datos de entrada, transformar esos datos y escribir el resultado de salida. Los datos y las transformaciones en una canalización son exclusivos de esa canalización y son de su propiedad. Aunque tu programa puede crear varias canalizaciones, estas no pueden compartir datos o transformaciones.

Puedes crear canalizaciones con diferentes grados de complejidad. Una canalización puede ser relativamente simple y lineal, en la que un conjunto de canalizaciones se ejecuta una después de la otra, o se puede ramificar y fusionar. De este modo, puedes considerar la canalización como un grafo dirigido de pasos, en vez de como una secuencia de pasos lineal y sencilla. La construcción de tu canalización puede crear este grafo dirigido a través del uso de condicionales, bucles y otras estructuras de programación comunes.

Nota: Cuando escribes un programa con el SDK de Dataflow, tu programa crea una especificación de la canalización. Esta especificación se envía a un ejecutor de canalizaciones, como el servicio de Cloud Dataflow o algún ejecutor de terceros. El ejecutor de la canalización ejecuta la canalización real de forma asíncrona. Una canalización también se puede ejecutar de forma local para realizar pruebas y depuraciones.

Cuando el ejecutor de actualizaciones compila tu canalización real para la ejecución distribuida, la canalización se puede optimizar. Por ejemplo, puede que resulte más eficiente, desde el punto de vista informático, ejecutar ciertas transformaciones a la vez, o en un orden diferente. El servicio de Dataflow administra completamente este aspecto de la ejecución de tu canalización.

Partes de una canalización

Una canalización consta de dos partes: datos, y transformaciones que se aplican a esos datos. Los SDK de Dataflow proporcionan clases que representan los datos y las transformaciones. Los SDK de Dataflow enlazan las clases de datos y las clases de transformaciones para compilar la canalización completa. Consulta Cómo compilar tu canalización y obtén una guía completa sobre cómo utilizar las clases del SDK de Dataflow para crear tu canalización.

Datos de la canalización

En los SDK de Dataflow, las canalizaciones utilizan una clase de colección especializada llamada PCollection para representar los datos de entrada, los intermedios y los de salida. Los elementos PCollection se pueden utilizar para representar conjuntos de datos de cualquier tamaño. Ten en cuenta que, en comparación con las clases de colección típicas como Collection de Java, las PCollection están diseñadas específicamente para admitir el procesamiento en paralelo.

Una canalización debe crear una PCollection para cualquier dato con el que necesite trabajar. Puedes leer datos desde una fuente externa a una PCollection, o puedes crear una PCollection a partir de datos locales de tu programa de Dataflow. Desde allí, cada transformación en tu canalización acepta una o más PCollections como entrada y genera una o más PCollections como salida.

Consulta PCollection para obtener un análisis detallado sobre el funcionamiento de la PCollection y cómo utilizarla.

Transformaciones de las canalizaciones

Una transformación es un paso en tu canalización. Cada transformación toma una o más PCollections como entrada, cambia o manipula los elementos de esa PCollection, y genera una o más PCollections nuevas como salida.

Transformaciones básicas

Los SDK de Dataflow contienen varias transformaciones básicas. Una transformación básica es una operación genérica que representa una operación de procesamiento básica o común que realizas en los datos de tu canalización. La mayoría de las transformaciones básicas brindan un patrón de procesamiento, y requieren que crees y proporciones la lógica de procesamiento real que se aplica a la PCollection de entrada.

Por ejemplo, la transformación básica ParDo proporciona un patrón de procesamiento genérico: por cada elemento en la PCollection de entrada, se realiza una función de procesamiento en ese elemento, especificada por el usuario. Los SDK de Dataflow brindan transformaciones básicas, como ParDo y GroupByKey, además de otras transformaciones básicas para combinar, fusionar y dividir conjuntos de datos.

Consulta Transformaciones para obtener un análisis completo sobre cómo utilizar las transformaciones en tu canalización.

Transformaciones compuestas

Los SDK de Dataflow admiten la combinación de varias transformaciones en transformaciones compuestas más grandes. En una transformación compuesta, se aplican múltiples transformaciones a los conjuntos de datos para realizar una operación de procesamiento de datos más compleja. Las transformaciones compuestas son una excelente forma de compilar combinaciones de transformaciones modulares y reutilizables que ejecuten tareas útiles.

Los SDK de Dataflow contienen bibliotecas de transformaciones compuestas predefinidas que manejan casos prácticos comunes de procesamiento de datos. Los siguientes son algunos de esos casos:

  • Combinación de datos, como la suma o el cálculo del promedio de los datos numéricos
  • Procesamiento de estilo Map/Shuffle/Reduce, como el conteo de elementos únicos de una colección
  • Análisis estadístico, como encontrar los principales elementos N en una colección

También puedes crear tu propia transformación compuesta reutilizable. Consulta Cómo crear transformaciones compuestas para obtener un análisis detallado.

Transformaciones raíz

Los SDK de Dataflow utilizan, con frecuencia, transformaciones raíz en el comienzo de la canalización para crear una PCollection inicial. Las transformaciones raíz, por lo general, implican leer datos desde una fuente de datos externa. Consulta E/S de la canalización para obtener más información.

Ejemplo de canalización simple

En el siguiente ejemplo, se demuestra cómo compilar y ejecutar una canalización con tres transformaciones: una que lea algunos de los datos, una que cuente los datos y una transformación que escriba los resultados completos de la cuenta.

Nota: Consulta Cómo compilar tu canalización para obtener un análisis completo sobre cómo compilar una canalización con las clases de los SDK de Dataflow.

Un estilo común de construcción de canalizaciones es realizar "cadenas" entre las transformaciones. Para hacer cadenas de transformaciones, debes aplicar cada transformación nueva directamente a la PCollection, que resulta de la transformación previa, como se muestra en el siguiente ejemplo.

Java

  public static void main(String[] args) {
    // Create a pipeline parameterized by commandline flags.
    Pipeline p = Pipeline.create(PipelineOptionsFactory.fromArgs(args));

    p.apply(TextIO.Read.from("gs://..."))   // Read input.
     .apply(new CountWords())               // Do some processing.
     .apply(TextIO.Write.to("gs://..."));   // Write output.

    // Run the pipeline.
    p.run();
  }

En el ejemplo, la primera llamada apply invoca una transformación raíz para crear una PCollection (en este caso, lo hace a través de una lectura de los datos de un archivo). Cada llamada subsiguiente a apply se llama en cada PCollection resultante por turnos.

Nota: Ten en cuenta que el valor que muestra la cadena completa no se guarda. Esto es así porque la llamada final de apply a la transformación Write muestra un valor trivial del tipo PDone, en vez de una PCollection. Generalmente, PDone se ignora.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.