Ich habe eine BigQuery-Tabelle, wobei jede Zeile eine Textdatei (gs: // ...) und eine Zeilennummer darstellt.Dateinamen aus PCollection extrahieren und effizient analysieren
file, line, meta
file1.txt, 10, meta1
file2.txt, 12, meta2
file1.txt, 198, meta3
Jede Datei ist etwa 1,5 GB und es gibt etwa 1k Dateien in meinem Eimer. Mein Ziel ist das Extrahieren von Zeilen, die in der BQ-Tabelle angegeben sind.
habe ich beschlossen, den folgenden Plan zu implementieren:
- Map
table
=>KV<file,line>
- reduzieren
KV<file,line>
=>KV<file, [lines]>
- Map
KV<file, [lines]>
=>[KV<file, rowData>]
wo rowData
tatsächlichen Zahlen bedeutet von file
auf die einige Linie von lines
.
Wenn ich Dokumente und SO sorgfältig lese, sollte TextIO.Read
nicht in solchen Bedingungen verwendet werden. Als Workaround kann ich GcsIoChannelFactory
verwenden, um Dateien von GCS zu lesen. Ist es richtig? Ist es ein bevorzugter Ansatz für die beschriebene Aufgabe?