在 Google Cloud Dataflow 中按顺序读取文件
Read file in order in Google Cloud Dataflow
我正在使用 Spotify Scio 读取从 Stackdriver 导出到 Google 云存储的日志。它们是 JSON 个文件,其中每一行都是一个条目。查看工作日志,文件似乎被分成块,然后以任意顺序读取。在这种情况下,我已经将我的工作限制为正好 1 名工人。有没有办法强制按顺序读取和处理这些块?
举个例子(textFile基本上就是一个TextIO.Read):
val sc = ScioContext(myOptions)
sc.textFile(myFile).map(line => logger.info(line))
根据工作日志会产生类似于此的输出:
line 5
line 6
line 7
line 8
<Some other work>
line 1
line 2
line 3
line 4
<Some other work>
line 9
line 10
line 11
line 12
我想知道是否有办法强制它按顺序读取第 1-12 行。我发现 gzip 文件并使用指定的 CompressionType 读取它是一种解决方法,但我想知道是否有任何方法可以做到这一点而不涉及压缩或更改原始文件。
Google Cloud Dataflow / Apache Beam 目前不支持在处理管道中排序或保留顺序。允许排序输出的缺点是它为大型数据集输出这样的结果最终会在单个机器上出现瓶颈,这对于大型数据集是不可扩展的。
我正在使用 Spotify Scio 读取从 Stackdriver 导出到 Google 云存储的日志。它们是 JSON 个文件,其中每一行都是一个条目。查看工作日志,文件似乎被分成块,然后以任意顺序读取。在这种情况下,我已经将我的工作限制为正好 1 名工人。有没有办法强制按顺序读取和处理这些块?
举个例子(textFile基本上就是一个TextIO.Read):
val sc = ScioContext(myOptions)
sc.textFile(myFile).map(line => logger.info(line))
根据工作日志会产生类似于此的输出:
line 5
line 6
line 7
line 8
<Some other work>
line 1
line 2
line 3
line 4
<Some other work>
line 9
line 10
line 11
line 12
我想知道是否有办法强制它按顺序读取第 1-12 行。我发现 gzip 文件并使用指定的 CompressionType 读取它是一种解决方法,但我想知道是否有任何方法可以做到这一点而不涉及压缩或更改原始文件。
Google Cloud Dataflow / Apache Beam 目前不支持在处理管道中排序或保留顺序。允许排序输出的缺点是它为大型数据集输出这样的结果最终会在单个机器上出现瓶颈,这对于大型数据集是不可扩展的。