Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从发布/订阅中读取并处理gzip_Python_Gzip_Google Cloud Dataflow_Apache Beam_Google Cloud Pubsub - Fatal编程技术网

Python 从发布/订阅中读取并处理gzip

Python 从发布/订阅中读取并处理gzip,python,gzip,google-cloud-dataflow,apache-beam,google-cloud-pubsub,Python,Gzip,Google Cloud Dataflow,Apache Beam,Google Cloud Pubsub,我正在构建一个管道,通过GoogleCloudDataflow(Python SDK)处理一些压缩的JSON消息。更准确地说,在发布到Google Cloud Pub/Sub之前,JSON文件被分组(4组)并以gzip格式压缩。然而,一旦发布,我不知道如何解压缩它们,然后为每个JSON消息创建一个PCollection(即4个PCollection)。 如果我在ReadFromPubSub步骤之后记录PCollection,我会得到如下结果: INFO:root:b'\x1f\xe2\x80\x

我正在构建一个管道,通过GoogleCloudDataflow(Python SDK)处理一些压缩的JSON消息。更准确地说,在发布到Google Cloud Pub/Sub之前,JSON文件被分组(4组)并以gzip格式压缩。然而,一旦发布,我不知道如何解压缩它们,然后为每个JSON消息创建一个PCollection(即4个PCollection)。
如果我在ReadFromPubSub步骤之后记录PCollection,我会得到如下结果:

INFO:root:b'\x1f\xe2\x80\xb9\x08\...\x06\x00\x00'  
我想这是消息的主体(字节对象)。
管道如下:

with beam.Pipeline(options=pipeline_options) as pipeline:
    events = (
        pipeline
        | 'Read PubSub Messages' >> beam.io.ReadFromPubSub(subscription=params["input_subscription"])
        | 'Logging zipped' >> beam.ParDo(beam_utils.LogFn())            
        | 'Uncompress data' >> beam.ParDo(UncompressData())
    )  
其中:

class UncompressData(beam.DoFn):
    def process(self, element):
        decompressed_byte_data = zlib.decompress(element, zlib.MAX_WBITS|32)
        yield decompressed_byte_data
但它不起作用,导致zlib.error(与zlib.MAX|WBITS | 16相同):


以前有人遇到过类似的问题吗?欢迎任何建议或解决方案

嘿,费德里科,帮你了吗?我尝试了那篇文章中列出的所有解决方案,但没有一个能正常工作。使用解压缩返回“error-3”,使用read()返回“embedded null byte”或“Not a gzip file(b'\x1f\xe2')”。问题可能出在压缩端。您是否使用压缩对象压缩数据,如
zlib.compressobj(9,zlib.DEFLATED,zlib.MAX|WBITS | 16)
?否,gzip压缩是使用外部工具执行的。它到底是什么外部工具?现在我尝试解压缩非常相似的数据
\x1f\xe2\x80\xb9\x08\x00\x00\x00\x00\…x03\x00\x00'
。你的问题解决了吗?
zlib.error: Error -3 while decompressing data: incorrect header check [while running 'Uncompress data']