首页 > 解决方案 > apache_beam (python SDK) 是否支持 .zip 压缩类型

问题描述

我正在使用 apache Beam 实现一个批处理管道,它可以解压缩 json 文件,对它们进行预处理并将它们存储回文件系统中的给定位置。

可以使用 ZIP 或 GZIP 算法压缩文件。

解压在 GZIP 文件上运行良好,但在 ZIP 文件上失败......经过调查,我发现只有 JAVA SDK 支持 GZIP、BZIP2 和 DEFLATE 压缩类型,但不存在 python 实现。

有没有办法在不修补 apache 梁 Python SDK 的情况下解决这个问题?

标签: pythonapache-beam

解决方案


Beam Python 不支持 ZIP。有两种解决方法:您可以读取 DoFn 中的文件,或者您可以通过Cross-Language Transform使用 Java SDK 的文件 IO 。

read-via-dofn 方法看起来像

filenames
  | beam.Map(lambda f: (f, None))
  | beam.GroupByKey() # The GroupByKey adds a fusion break so that files can be processed in parallel
  | beam.Map(lambda f: f[0])
  | beam.FlatMap(lambda f: [line for line in read(f)]  

推荐阅读