Archivos de texto

Los SDK de Dataflow tienen transformaciones Read y Write integradas para archivos de texto. Estas transformaciones dan por sentado que los archivos de texto que se escribirán o leerán están delimitados por saltos de línea, lo que significa que cada “registro” en el archivo es una línea de texto única que finaliza en un carácter de línea nueva.

Puedes leer y escribir archivos locales (es decir, archivos en el sistema en el que tu programa de Dataflow se ejecuta) y archivos remotos en Google Cloud Storage.

Java

Nota: Si deseas que la canalización lea o escriba archivos locales, deberás usar DirectPipelineRunner para ejecutar la canalización de manera local. Esto se debe a que las instancias de Google Compute Engine que usan el servicio de Dataflow a fin de ejecutar la canalización no podrán acceder a los archivos en la máquina local para realizar operaciones de lectura y escritura.

Lee desde los archivos de texto

Java

Para leer desde un archivo de texto, aplica TextIO.Read al objeto Pipeline. TextIO.Read lee el archivo de texto y muestra una PCollection<String>. Cada String en la PCollection resultante representa una línea del archivo de texto.

  PipelineOptions options = PipelineOptionsFactory.create();
  Pipeline p = Pipeline.create(options);

  PCollection<String> lines = p.apply(
    TextIO.Read.named("ReadMyFile").from("gs://some/inputData.txt"));

En el ejemplo, el código llama a apply en el objeto Pipeline y pasa TextIO.Read como la transformación Read. La operación .named proporciona un nombre de transformación para la operación de lectura y la operación .from proporciona la ruta del archivo. El valor de retorno de apply es la PCollection<String> resultante llamada lines.

Al igual que con otras fuentes de Dataflow basadas en archivos, la transformación TextIO.Read puede leer varios archivos de entrada. Para obtener más información sobre cómo controlar varios archivos cuando se lee desde las fuentes basadas en archivos, consulta Lee datos de entrada.

Escribe en los archivos de texto

Java

Para generar datos en los archivos de texto, aplica TextIO.Write a la PCollection que deseas generar. Ten en cuenta lo siguiente cuando uses TextIO.Write:

  • Solo puedes aplicar TextIO.Write a una PCollection<String>. Es posible que debas usar un ParDo simple para dar formato a los datos desde una PCollection intermedia hasta un PCollection<String> antes de escribir con TextIO.Write.
  • Cada elemento en la PCollection de salida representará una línea en el archivo de texto resultante.
  • Las operaciones de escritura basadas en archivos de Dataflow, como TextIO.Write, escriben en varios archivos de salida de forma predeterminada. Para obtener más información, consulta Escribe datos de salida.
  PCollection<String> filteredWords = ...;
  filteredWords.apply(TextIO.Write.named("WriteMyFile")
                                  .to("gs://some/outputData"));

En el ejemplo, el código llama a apply en la PCollection que se generará, y pasa TextIO.Write como la transformación Write. La operación .named proporciona un nombre de transformación para la operación de escritura, y la operación .to proporciona la ruta a los archivos de salida resultantes.

Lee desde los archivos de texto comprimidos

Java

Puedes usar la transformación TextIO.Read con archivos de texto comprimidos, en particular, archivos comprimidos con gzip y bzip2. Para leer un archivo comprimido, debes especificar el tipo de compresión:

Debes especificar el tipo de compresión mediante el método .withCompressionType.

  Pipeline p = ...;
  p.apply(TextIO.Read.named("ReadMyFile")
                     .from("gs://some/inputData.gz")
                     .withCompressionType(TextIO.CompressionType.GZIP));

En la actualidad, TextIO no es compatible con la escritura en archivos comprimidos.

Si el archivo tiene una extensión .gz o .bz2, no necesitas especificar de forma explícita un tipo de compresión. El tipo de compresión predeterminado, AUTO, examina las extensiones del archivo a fin de determinar el tipo de compresión correcto para un archivo. Esto funciona incluso con globs; en cuyo caso, los archivos que resultan del glob pueden ser una combinación de .gz, .bz2 y tipos sin comprimir.