Archivos de texto

Los SDK de Dataflow cuentan con transformaciones integradas Read y Write 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 los archivos remotos en Google Cloud Storage.

Java

Nota: Si deseas que tu canalización lea o escriba archivos locales, deberás usar DirectPipelineRunner para ejecutar tu 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 tu canalización no podrán acceder a los archivos en tu 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 a tu objeto Pipeline. TextIO.Read lee el archivo de texto y muestra un PCollection<String>. Cada String en el PCollection resultante representa una línea desde el 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, mientras que la operación .from proporciona la ruta de acceso al archivo. El valor que se muestra 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 escribir datos en los archivos de texto, aplica TextIO.Write a la PCollection en la que deseas escribir. Ten en cuenta lo siguiente cuando uses TextIO.Write:

  • Quizá solo quieras aplicar TextIO.Write a una PCollection<String>. Es posible que necesites usar un ParDo simple para dar formato a tus datos desde una PCollection intermedia a una PCollection<String> antes de escribir con TextIO.Write.
  • Cada elemento del resultado de PCollection 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 para escribir y pasar TextIO.Write como la transformación Write. La operación .named proporciona un nombre de transformación para la operación de escritura, mientras que la operación .to proporciona la ruta de acceso a los archivos de salida resultantes.

Lee desde los archivos de texto comprimidos

Java

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

Especifica 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 tu archivo tiene una extensión .gz o .bz2, no necesitas especificar el tipo de compresión de forma explícita. 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 incluso funciona con globs, en el que los archivos que resultan del glob pueden ser una combinación de .gz, .bz2, y de tipos sin comprimir.

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.