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

时间:2016-11-07 12:56:11

标签: google-cloud-dataflow

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

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

每个文件大约1.5Gb,我的存储桶中有大约1k个文件。我的目标是提取BQ表中指定的行。

我决定实施以下计划:

  1. 地图table =&gt; KV<file,line>
  2. 减少KV<file,line> =&gt; KV<file, [lines]>
  3. 地图KV<file, [lines]> =&gt; [KV<file, rowData>]
  4. 其中rowData表示来自file某行的lines的实际数据。

    如果我仔细阅读文档和SO,那么TextIO.Read不应该在这种情况下使用。作为一种解决方法,我可以使用GcsIoChannelFactory从GCS读取文件。这是对的吗?这是描述任务的首选方法吗?

1 个答案:

答案 0 :(得分:0)

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

这个和其他类似的场景在Splittable DoFn会变得更好 - 正在进行的工作正在进行中,但这是一项大量的工作,所以还没有时间轴。