Fichiers texte

Les SDK Dataflow comportent des transformations Read et Write intégrées pour les fichiers texte. Ces transformations supposent que les fichiers texte à lire ou dans lesquels écrire sont délimités par une nouvelle ligne. Cela signifie que chaque "enregistrement" dans le fichier correspond à une ligne de texte unique se terminant par un caractère de nouvelle ligne.

Vous pouvez effectuer des opérations de lecture et d'écriture dans des fichiers locaux (c'est-à-dire des fichiers sur le système où votre programme Dataflow est exécuté) et des fichiers distants dans Google Cloud Storage.

Java

Remarque : Si vous souhaitez que votre pipeline effectue des opérations en lecture ou en écriture dans des fichiers locaux, vous devez utiliser DirectPipelineRunner pour exécuter votre pipeline en local. En effet, les instances de Google Compute Engine auxquelles le service Dataflow fait appel pour exécuter ce pipeline ne pourront pas accéder en lecture ni en écriture aux fichiers situés sur votre machine locale.

Lire depuis des fichiers texte

Java

Pour lire un fichier texte, appliquez TextIO.Read à votre objet Pipeline. TextIO.Read lit le fichier texte et renvoie un PCollection<String>. Chaque String de la PCollection résultante représente une ligne du fichier texte.

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

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

Dans l'exemple, le code appelle apply sur l'objet Pipeline et transmet TextIO.Read en tant que transformation Read. L'opération .named fournit un nom de transformation pour l'opération de lecture et l'opération .from fournit le chemin d'accès au fichier. La valeur renvoyée par apply est l'élément PCollection<String> résultant, nommé lines.

Comme avec d'autres sources Dataflow basées sur des fichiers, la transformation TextIO.Read peut lire plusieurs fichiers d'entrée. Consultez la section Lire des données d'entrée pour savoir comment gérer plusieurs fichiers lorsque vous effectuez des opérations de lecture à partir de sources basées sur des fichiers.

Écrire dans des fichiers texte

Java

Pour générer des données dans des fichiers texte, appliquez TextIO.Write au PCollection que vous souhaitez obtenir en sortie. Gardez les points suivants à l'esprit lorsque vous utilisez TextIO.Write :

  • Vous ne pouvez appliquer TextIO.Write qu'à PCollection<String>. Vous devrez peut-être utiliser un simple ParDo pour formater vos données d'une PCollection intermédiaire à une classe PCollection<String> avant de les écrire avec TextIO.Write.
  • Chaque élément du PCollection de sortie représentera une ligne dans le fichier texte résultant.
  • Les opérations d'écriture basées sur les fichiers de Dataflow, telles que TextIO.Write, écrivent dans plusieurs fichiers de sortie par défaut. Pour plus d'informations, consultez la section Écrire des données de sortie.
  PCollection<String> filteredWords = ...;
  filteredWords.apply(TextIO.Write.named("WriteMyFile")
                                  .to("gs://some/outputData"));

Dans l'exemple, le code appelle apply sur l'élément PCollection à générer, et transmet TextIO.Write en tant que transformation Write. L'opération .named fournit un nom de transformation pour l'opération d'écriture et l'opération .to fournit le chemin d'accès aux fichiers de sortie résultants.

Lire depuis des fichiers texte compressés

Java

Vous pouvez utiliser la transformation TextIO.Read avec des fichiers texte compressés, en particulier des fichiers compressés avec gzip et bzip2. Pour lire un fichier compressé, vous devez spécifier le type de compression :

Spécifiez le type de compression à l'aide de la méthode .withCompressionType.

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

TextIO n'est actuellement pas compatible avec l'écriture dans des fichiers compressés.

Si votre fichier comporte une extension .gz ou .bz2, vous n'avez pas besoin de spécifier un type de compression. Le type de compression par défaut, AUTO, examine les extensions de fichier pour déterminer le type de compression correct pour un fichier. Cela fonctionne même avec globs, où les fichiers qui résultent du glob peuvent être un mélange de .gz, .bz2 et de types non compressés.