apache beam 不支持 gsutil -Z

apache beam does not support gsutil -Z

使用 Apache Beam python SDK 2.2。 这可能是一个错误。

我有一个包含标准 csv 文件的本地文件夹。 我运行以下命令:

gsutil -m cp -Z -L output.log *.csv gs://my-bucket

正如预期的那样,文件已上传到扩展名为 *.csv 的存储桶,其中包含一些元数据,如文档中所述。

问题 #1: 扩展名不是 .csv.gz 所以 compression_type=beam.io.filesystem.CompressionTypes.AUTO 根本不起作用,假设没有压缩(基于扩展名)。

因此,如果我将压缩设置为 UNCOMPRESSED 或 GZIP,我将在 gcsio.py assert len(value) == size 行 642 中获得一个断言。 内容未压缩(可能是由于 headers gsutil 集),因此无法正确读取大小(代码似乎期望压缩 value/size 对,但未压缩 value/compressed 大小)。

如果我使用 7z 压缩我的 csv 文件并手动上传到存储桶,一切正常,我们得到的值是压缩后的值和压缩后的大小。

问题 #2: 似乎 apache beam python sdk 不支持 gsutil 压缩...? 使用 gsutil 有什么解决办法吗?我宁愿在上传之前不要将某些东西编写成 gzip 脚本,因为我会在下载存储提供时失去自动解压缩。

PS:我使用来自 https://github.com/pabloem/beam_utils/blob/master/beam_utils/sources.py 的 CsvFileSource 的稍微修改版本:它读取整个文件而不是逐行读取。

我认为这些文件是在基于内容编码的运行时(读取)由 GCS 解压缩的。 Python SDK 目前不支持 GCS 自动解压。相关问题是 https://issues.apache.org/jira/browse/BEAM-1874。我们会在不久的将来尝试对此进行调查。