我正在尝试使用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?
编辑,除了解析许多小的单个文件然后进行串联连接之外,还有其他更好的选择吗?