2016-08-30 4 views
1

zählen würde ich gerne wissen, ob es einen Weg gibt insgesamt keine Zeilen in einer Datei mit Google Datenfluß, um herauszufinden. Jedes Codebeispiel und jeder Zeiger ist eine große Hilfe. Grundsätzlich habe ich ein Verfahren, wieWie Gesamtzahl der Zeilen in einer Datei mit Google Datenfluß

int getCount(String fileName) {} 

So wird über Methode zurückgeben Gesamtanzahl der Zeilen und deren Umsetzung wird Datenfluß Code sein.

Dank

+0

Können Sie klären, wie groß ist die Datei, und warum Sie Datenfluss verwenden hierfür wollen im Gegensatz zu einer geradliniges Java-Programm, das die Datei liest und Zeilen einzeln zählt? Es sei denn, die Datei ist zumindest viele Gigabyte groß, und es sei denn, die Datei bereits auf Google Cloud Storage gespeichert ist, Datenfluss ist wahrscheinlich nicht das beste Werkzeug für den Job. – jkff

+0

Danke für das Betrachten. Yes-Datei ist im Grunde eine gz-Datei mit der Größe in GBs. Auch die Datei befindet sich im GCS-Bereich. Abgesehen von Datenfluss, denkst du über eine andere Art oder hast Beispielcode, Link für mich zu betrachten. Ich bin in der Lage Datei von GCS Eimern lesen unter Verwendung von mit Datenfluß in PCollection (String) und gilt Count.Globally auf, aber diese wieder geben Sie mir PCollection (Long), so bin nicht in der Lage einzelnen langen Wert von meiner Methode zurückzukehren. Vielen Dank. – Programmer

+0

vielleicht hilft das? https://cloud.google.com/dataflow/model/combine – chchrist

Antwort

2

wie Ihr Anwendungsfall scheint, ist eine, die Verarbeitung erfordern nicht verteilt, da die Datei komprimiert ist und daher nicht gleichzeitig gelesen werden können. finden Sie können jedoch nach wie vor nützlich es Datenfluß-APIs zum Wohl ihrer einfachen Zugangs zu GCS und automatischer Dekompression zu verwenden.

Da Sie das Ergebnis auch als tatsächliches Java-Objekt aus Ihrer Pipeline herausholen möchten, müssen Sie den Direct-Runner verwenden, der prozessintern ausgeführt wird, ohne mit dem Dataflow-Dienst zu kommunizieren oder eine verteilte Verarbeitung durchzuführen Rückkehr es die Fähigkeit PCollection ‚s in Java-Objekte zu extrahieren bietet:

wie diese

Etwas:

PipelineOptions options = ...; 
DirectPipelineRunner runner = DirectPipelineRunner.fromOptions(options); 
Pipeline p = Pipeline.create(options); 
PCollection<Long> countPC = 
    p.apply(TextIO.Read.from("gs://...")) 
    .apply(Count.<String>globally()); 
DirectPipelineRunner.EvaluationResults results = runner.run(p); 
long count = results.getPCollection(countPC).get(0); 
Verwandte Themen