2016-11-22 3 views
0

Gibt es eine Möglichkeit, PTransform B von PTransform A abhängig zu machen, wenn A keine Ausgänge erzeugt? Oder muss ich A eine Dummy-Ausgabe produzieren lassen, die als Seiteneingabe in B eingegeben wird? Ein Beispiel Anwendungsfall ist, wo ich die folgende Pipeline haben will:Apache Beam: Kann Schritt B von Schritt A abhängen, ohne die Ausgaben von A in B zu übergeben?

Z = read file 
A = count lines in file, and throw error if there are no lines 
B = do something with the file 

Ich will B nur starten, nachdem A beendet ist, aber A erzeugt keine Ausgabe PCollection nützlich B.

Antwort

3

Es ist möglich, aber in Ihrem Fall möglicherweise nicht wirklich wünschenswert. Das Hinzufügen einer Abhängigkeit wie dieser wird die parallele Ausführung des Programms verlangsamen, da B warten muss, bis A abgeschlossen ist, bevor es starten kann.

Wenn Sie dies wirklich tun möchten, sollte die Art und Weise, wie Sie beschrieben haben - die Ausgabe eines Elements und die Verwendung als Seiteneingabe in B funktionieren. Betrachten Sie stattdessen die folgenden, die Sie die primitive Count Transformation zu implementieren A verwenden können, und bewegt die gesamte Logik in einem Ort:

Z = read file 
A = count lines in file 
B = side input from A, throw error if the count of lines was zero,  
    otherwise do something with the file 
+0

Dank. Von dem, was ich verstehe, ist Ihr Vorschlag, B eine zusammengesetzte Transformation w/2 Unterschritte zu machen, eine, die Fehler, wenn die Anzahl Null ist, und eine, die die Datei verarbeitet. Aber in diesem Fall gibt es immer noch keine Möglichkeit, die letztere von der ersteren abhängig zu machen, ohne dass der fehlerhafte Unterschritt ein Element ausgeben würde, das von dem Verarbeitungsunterschritt verwendet wird, richtig? (Ie, die Reihenfolge, in der Unterschritte in einer Composite-Transformation 'Apply'-Funktion angegeben ist, spielt keine Rolle) Meine Motivation zu wollen, dass B von A abhängen, ist, dass B einen abstrusen Fehler gibt, wenn die Anzahl der Zeilen = 0, also ich will, dass A's Vorrang haben. – jwayne

Verwandte Themen