基于压缩文件中的文件的不同管道

时间:2018-05-13 13:19:40

标签: python google-cloud-dataflow apache-beam

我在google云存储桶中有一个压缩文件。此文件包含一个大的csv文件和一个基于xml的小元数据文件。我想提取两个文件并确定元数据并处理csv文件。我正在使用Python SDK,管道将在某个时刻在Google Dataflow上运行。

目前的解决方案是使用Google Cloud Functions提取这两个文件,并使用从xml文件解析的参数启动管道。

我想取消Google Cloud功能并在Apache Beam中处理压缩文件。管道应处理XML文件,然后处理csv文件。

但是,我坚持将这两个文件解压缩到单独的集合中。我想了解我的解决方案是否有缺陷,或者如果没有,是一个如何在单个压缩文件中处理不同文件的示例。

1 个答案:

答案 0 :(得分:1)

根据我的理解,这是通过梁中任何现有的文本IO无法实现的。

您的设计问题在于,您正在强制执行文件读取顺序的依赖关系(在处理CSV文件之前必须读取元数据xml以及理解CSV的逻辑。任何具体文本IO都不支持这两者。

如果您确实希望拥有这种灵活性,我建议您查看vcfio。您可能还想编写自己的继承自filebasedsource.FileBasedSource的读者。 vcfio的实现与您的案例有一些相似之处,因为总有一个标题解释了如何解释VCF-formatted文件中的CSV部分。

实际上,如果你能以某种方式重写你的xml metdata并将其作为标题添加到csv文件中,你可能会使用vcfio代替。