使用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中获得一个断言。
内容是未压缩的(可能是由于头部gsutil设置)因此无法正确读取大小(代码似乎期望压缩的值/大小对,但它获得未压缩的值/压缩大小)。
如果我使用7z gzip我的csv文件并手动上传到存储桶,一切正常,我们得到的值是压缩后的压缩值。
问题#2:似乎apache beam python sdk不支持gsutil压缩...? 有没有使用gsutil的工作?我不想在上传之前将内容编写为gzip,因为我会在下载存储空间时失去自动解压缩功能。
PS:我使用来自https://github.com/pabloem/beam_utils/blob/master/beam_utils/sources.py的CsvFileSource的略微修改版本:它读取整个文件而不是逐行。
答案 0 :(得分:1)
我认为这些文件是在运行时(读取)基于内容编码由GCS解压缩的。 Python SDK目前不支持GCS自动解压缩。相关问题是https://issues.apache.org/jira/browse/BEAM-1874。我们将在不久的将来尝试对此进行研究。