GCP Dataproc 上的 Pyspark - 部分读取 gzip 编码的云存储文件的数据

问题描述 投票:0回答:2

我在 Google Dataproc 中有一个工作流模板,它从 Google Cloud Storage 中的 json gzip 压缩文件读取架构,其中包含以下标头(因此符合解压缩转码的条件):

Content-Encoding:       gzip
Content-Type:           application/json

我添加了以下选项,在 Hadoop 连接器中找到here,以确保我的工作流程接受 gzip 编码文件:

gcloud dataproc workflow-templates set-managed-cluster $WORKFLOW_NAME \
        ...
        --properties=core:fs.gs.inputstream.support.gzip.encoding.enable=true

然后,我使用以下 pyspark 行从我的架构中读取 GCS 文件:

decodedDF = spark.read.schema(globalSchema).option("header", True).json(<list-of-GCS-folders-containing-json-files>)

到目前为止一切顺利:工作流程运行良好,没有错误日志。

但是,我的 pyspark 作业的输出与使用未压缩的 GCS 文件运行完全相同的工作流程时不同。

看起来(虽然我无法确认)它仅处理部分文件内容(根据值的总和大约为数据的 10%),但在检查平均值时看起来是连贯的。更改 json 文件的 gzip 压缩级别也会产生不同的结果。

这怎么可能?如何修复 Dataproc 工作流程模板以获得正确的结果?

google-cloud-platform pyspark google-cloud-storage gzip google-cloud-dataproc
2个回答
1
投票

问题链接至 此 GitHub 问题

总结一下线程,基于HTTP header的自动解压

Content-Encoding
与Hadoop文件系统不兼容。

解决方案是从 GCS 文件中删除

Content-Encoding
标头,添加
.gz
后缀并设置
Content-Type: application/gzip


0
投票

改为使用此属性:

spark.hadoop.fs.gs.inputstream.support.gzip.encoding.enable=true

© www.soinside.com 2019 - 2024. All rights reserved.