martes, 2 de enero de 2018

Lectura en múltiples archivos con Google Cloud DataFlow

En google cloud español publicado el 2018 Ene 02 por Matthias Baetens

Cada vez que necesite leer archivos de varias carpetas de Google Cloud Storage en una interconexión de Dataflow (como me ocurre a mi), podría encontrarse con un pequeño problema (como se describe en esta pregunta de Stackoverflow). En este consejo, describiré cómo resolví el problema anteriormente y proporcionaré algún código que pueda usar cuando tenga una lista separada por comas de los archivos que desea ejecutar.

Pasos

Lo que puede hacer en este caso se lee en los archivos de la forma habitual utilizando TextIO y PCollection, y luego se crea una PCollectionList, que consiste en estas PCollections y luego se une todo en una PCollection.


Código

Cuando tiene una lista separada por comas como entrada, con todas las rutas que desea leer (que se pueden pasar fácilmente como un argumento de línea de comandos) debe poder usar el siguiente código de Java:


String input = "gs://xxx/*,gs://yyy/zzz/*" // (or options.getInput())
ArrayList<PCollection<String>> pcollectionlist = new ArrayList<>();

String[] input = inputs.split(",");
for(String i : input) {
 PCollection<String> extra = p.apply(TextIO.read().from(i));
 pcollectionlist.add(extra);
}
  
PCollectionList<String> tempRes = PCollectionList.of(pcollectionlist); 
PCollection<String> res = tempRes.apply(Flatten.pCollections());

Resultado

Y así es como podría verse tu gráfico de entrada para 7 archivos de entrada, por ejemplo:



Saber más:


________