用于Apache Beam中压缩文件的自定义FileBasedSource

时间:2019-08-08 20:40:35

标签: python apache-beam apache-beam-io

我正在尝试使用Apache Beam在GCS上处理约10,000个较小的XML文件。

我当前的方法是编写一个自定义FileBasedSource,它将XML解析为元素的PCollection。我还想使用内置的glob和GCS IO。

这似乎适用于常规文件,但对于压缩文件,file.read方法需要一个num_bytes参数。处理此文件的正确方法是什么?

class CustomSource(FileBasedSource):
    def __init__(self, file_pattern):
        super().__init__(file_pattern, splittable=False)
    def read_records(file_name, range_tracker):
        f = self.open_file(file_name)
        yield f.read()    # throws missing argument error

file_pattern='gs://my-bucket/*.gz'

我应该如何选择num_bytes?这是否取决于运行程序上可用的RAM?

编辑,除了解析许多小的单个文件然后进行串联连接之外,还有其他更好的选择吗?

0 个答案:

没有答案