从 PCollection 中提取文件名并有效地解析它们

Extract file names from PCollection and parse them efficiently

我有一个 BigQuery table,其中每一行代表一个文本文件 (gs://...) 和一个行号。

file, line, meta
file1.txt, 10, meta1
file2.txt, 12, meta2
file1.txt, 198, meta3

每个文件约1.5Gb,我的桶中约有1k个文件。我的目标是提取 BQ table.

中指定的行

我决定实施以下计划:

  1. 地图table=>KV<file,line>
  2. 减少 KV<file,line> => KV<file, [lines]>
  3. 地图KV<file, [lines]>=>[KV<file, rowData>]

其中 rowData 表示来自 file 在来自 lines.

的某行上的实际数据

如果我仔细阅读文档,TextIO.Read 不应该在这种情况下使用。作为解决方法,我可以使用 GcsIoChannelFactory 从 GCS 读取文件。这是对的吗?对于所描述的任务,它是更好的方法吗?

是的,你的做法是正确的。目前没有更好的方法从文本文件中读取带有行号的行,除了自己使用 GcsIoChannelFactory(或编写自定义 FileBasedSource,但这更复杂,并且在你的情况是因为事先不知道文件名)。

Splittable DoFn 这种情况和其他类似情况会变得更好 - 相关工作正在进行中,但工作量很大,因此尚无时间表。