我有一个BigQuery表,其中每一行代表一个文本文件(gs:// ...)和一个行号。
file, line, meta
file1.txt, 10, meta1
file2.txt, 12, meta2
file1.txt, 198, meta3
每个文件大约1.5Gb,我的存储桶中有大约1k个文件。我的目标是提取BQ表中指定的行。
我决定实施以下计划:
table
=&gt; KV<file,line>
KV<file,line>
=&gt; KV<file, [lines]>
KV<file, [lines]>
=&gt; [KV<file, rowData>]
其中rowData
表示来自file
某行的lines
的实际数据。
如果我仔细阅读文档和SO,那么TextIO.Read
不应该在这种情况下使用。作为一种解决方法,我可以使用GcsIoChannelFactory
从GCS读取文件。这是对的吗?这是描述任务的首选方法吗?
答案 0 :(得分:0)
是的,您的方法是正确的。目前没有比使用文本文件中的行号读取行更好的方法,除了使用GcsIoChannelFactory
(或编写自定义FileBasedSource
)自己做,但这更复杂,并且不会在你的情况下工作,因为事先不知道文件名。)
这个和其他类似的场景在Splittable DoFn会变得更好 - 正在进行的工作正在进行中,但这是一项大量的工作,所以还没有时间轴。