从Python中的DataFlow中读取Snappy或LZO压缩文件



是否有一种方法可以使用Apache Beam的Python SDK读取数据流上的Snappy或LZO压缩文件?

由于我找不到更简单的方法,所以这是我当前的方法(这似乎完全过高且效率低下(:

  • 开始DataProc Cluster
  • 使用新群集中的Hive取消压缩此类数据,并将其放在临时位置
  • 停止DataProc群集
  • 运行从这些临时未压缩数据读取的数据流程
  • 清理临时未压缩数据

我认为今天没有任何内置的方式使用梁。Python Beam支持GZIP,BZIP2和DEFLATE。

选项1:在整个文件中读取并手动解压缩

  1. 创建一个自定义源以产生文件名列表(即,通过列出目录从管道选项中播种(,并将其排放为记录
  2. 在以下帕多(Pardo(中,手动阅读每个文件并将其解压缩。如果您将数据存储在此处,则需要使用GCS库来读取GCS文件。

此解决方案的性能可能不会那么快,并且无法将大文件加载到内存中。但是,如果您的文件大小很小,则可能足够好。

选项2:向光束添加新的解压器。

您也许可以为梁贡献解压缩器。看来您需要实现解压缩器逻辑,提供一些常数以在pipleine时指定它。

我认为,限制之一是必须一次扫描文件并在块中进行解压缩。如果压缩格式需要将整个文件读为内存,则可能无法正常工作。这是因为Textio库被设计为基于记录,它支持读取不适合内存的大文件并将它们分解为小记录进行处理。

最新更新