2016-03-30 4 views
1

Ich habe eine benutzerdefinierte Senke erweitert FileBasedSink, auf die ich schreibe, indem ich PCollection.apply(Write.to(MySink)) im Datenfluss (sehr einfach zu XmlSink.java). Wie es scheint, wird der Aufruf von Write.to standardmäßig immer zu 3 Shards führen? Gibt es eine Möglichkeit, dass ich die Anzahl der Ausgabe-Shard (wie TextTO.Write.withNumShards) nur in benutzerdefinierten Spüle-Klasse-Definition definieren könnte? oder muss ich eine andere kundenspezifische PTransformer wie TextIO.Write definieren?Anzahl der Ausgabe Shard in Write.to (Sink) im Datenfluss

Antwort

0

Leider unterstützt FileBasedSink derzeit nicht die Anzahl der Shards.

In der Praxis hängt die Anzahl der Shards davon ab, wie das Framework die Teile der Pipeline optimiert, aus denen die Sammlung besteht, die Sie schreiben. Es gibt also praktisch keine Kontrolle darüber.

Ich habe a JIRA issue für Ihre Anfrage abgelegt, so dass Sie den Status abonnieren können.

+0

danke jkff, ahh möchte mir klar machen, ist alles benutzerdefinierte Spüle nicht in der Lage, Kontrolle über die Anzahl der Ausgabe Shard zu unterstützen? und was ist Ihrer Meinung nach der beste Weg, um am aktuellen Punkt zu gehen, um eine flexible Anzahl von Output-Shards mit meiner angepassten Senke zu ermöglichen? –

+0

Ich denke, der einzige Weg, um dies zu erreichen, ist derzeit ohne die benutzerdefinierte Senke API: pipe Ihre Daten durch ein ParDo {Hash die Daten modulo numShards} | GBK | ParDo {schreibe Daten dieses Shards in eine temporäre Datei; in finishBundle, benenne es atomar an den endgültigen Ort um}. – jkff

+0

Beachten Sie jedoch, dass dies auch in vielen Diensten wegen dynamischer Work Rebalancing nicht funktionieren wird. –