You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在非Spark环境下读取Azure存储中的.json.gzip格式JSON文件?

解决Azure Blob存储gzip压缩JSON文件的读取问题

问题背景

从Azure Blob Storage下载后缀为.gzip的JSON压缩文件,使用两种Python方法读取失败,但Spark可正常读取,需非Spark环境的解决方案。

错误原因分析

  1. 尝试1:使用gzip.decompress得到空结果,大概率是未正确处理解压后的多行JSON数据(Spark读取默认支持多行JSON),也可能是打印结果被截断导致的假象,可通过len(result)验证实际数据长度。
  2. 尝试2:错误使用pd.read_csv读取JSON格式文件,文件类型不匹配,必然报错。

正确解决方案

方案1:gzip+JSON模块手动解析(适用于自定义解析逻辑)

from io import BytesIO
import gzip
import json
import pandas as pd

# 读取Blob完整内容到内存流
blob_data = BytesIO(myStorageStreamDownloaderObject.readall())

# 解压并逐行解析多行JSON
with gzip.GzipFile(fileobj=blob_data, mode='rb') as decompressed_file:
    json_data = [json.loads(line.strip()) for line in decompressed_file if line.strip()]

# 转换为DataFrame
df = pd.DataFrame(json_data)

方案2:Pandas直接读取(最简方式)

利用Pandas原生支持压缩文件和多行JSON的特性:

from io import BytesIO
import pandas as pd

# 将Blob内容转为内存流
input_stream = BytesIO(myStorageStreamDownloaderObject.readall())
input_stream.seek(0)

# 关键:使用read_json而非read_csv,指定gzip压缩和多行模式
df = pd.read_json(input_stream, compression='gzip', lines=True)

验证提示

  • 你的contents开头\x1f\x8b是标准gzip魔数,文件格式没问题。
  • 若文件是单个JSON数组而非多行JSON,去掉lines=True参数即可。

内容的提问来源于stack exchange,提问作者Frank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:17:19