0

Nous travaillons actuellement sur une preuve de concept Apache Beam Pipeline sur Cloud Dataflow. Nous mettons des fichiers (pas de texte, un format binaire personnalisé) dans Google Cloud Buckets et nous aimerions lire ces fichiers comme byte [] et les désérialiser dans le flux. Cependant, nous ne pouvons pas trouver une source Beam capable de lire des fichiers non-texte. La seule idée est d'étendre la classe FileBasedSource, mais nous pensons qu'il devrait y avoir une solution plus facile, car cela semble être une tâche plutôt simple.Comment lire les fichiers en tant que byte [] dans Apache Beam?

Merci les gars pour votre aide.

Répondre

1

Ceci est en fait une caractéristique généralement utile, actuellement à l'étude dans pull request #3717

Je répondrai généralement de toute façon, juste pour diffuser de l'information. Le but principal du FileBasedSource, et des abstractions de source de Beam en général, est de fournir la séparation flexible de la collection de dossiers, vue en tant qu'un gros ensemble de données avec un enregistrement par ligne.

Si vous avez un seul enregistrement par fichier, vous pouvez lire les fichiers dans un ParDo(DoFn) à partir des noms de fichier à byte[]. Vous obtiendrez déjà le bénéfice maximum du fractionnement, puisque la division entre les éléments est supportée pour n'importe quel PCollection. En raison de l'optimisation de Dataflow, il se peut que vous souhaitiez une transformation Reshuffle avant votre «ParDo». Cela garantira que le parallélisme de la lecture de tous les fichiers est découplé du parallélisme de toutes les transformations en amont qui injectent leurs noms dans PCollection.