首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用pyarrow读取大型压缩json文件,类似于pandas阅读器功能。

使用pyarrow读取大型压缩json文件,类似于pandas阅读器功能。
EN

Stack Overflow用户
提问于 2020-11-06 06:00:53
回答 1查看 732关注 0票数 0

我有一个很大的压缩json文件,未压缩的单个文件大约有128GBs。使用.gz压缩时,文件大小约为21 is。我想利用pyarrow以块的形式读取文件,并将其转换为拼图数据集。我想模仿panda的阅读器功能,但遇到了一些问题。

我有以下代码,其中压缩的json文件通过pandas read_json读入块中,然后将这些块转换为apache箭头表,然后写出到parquet数据集:

代码语言:javascript
运行
复制
reader = pd.read_json("file.json.gz", lines=True, chunksize=5000000) 
for chunk in reader:
   arrow_table = pa.Table.from_pandas(chunk,nthreads=4)
   pq.write_to_dataset(arrow_table,root_path="dir")

这段代码得到了我想要的结果,但是我想直接使用apache arrow,而不必先进入分块的pandas数据帧,然后再转到apache箭头表。首先,我希望在性能上有所提升,因为与pandas read_json相比,apache arrow的多线程读取能力更强。

我曾尝试使用pyarrow.json类的ReadOptions (https://arrow.apache.org/docs/python/generated/pyarrow.json.ReadOptions.html#pyarrow.json.ReadOptions),但是,当我运行以下代码时,我发现apache arrow在按照我在block_size参数中设置的块大小读取文件之前,会先解压缩内存中的整个文件,如果我让代码运行,文件的大小会出现内存不足错误。

代码语言:javascript
运行
复制
from pyarrow import json 
opts = json.ReadOptions(block_size=4096) 
with json.read_json('file.json.gz',opts) as f: 
    table = f 
    pq.write_to_dataset(table, root_path='dir')

代替with json.read_json,我研究了类似于文件流读取器的输入流功能,但不确定这是否是正确的路线。

欢迎任何建议。

EN

回答 1

Stack Overflow用户

发布于 2020-11-06 06:22:00

这听起来和https://issues.apache.org/jira/browse/ARROW-10372很相似。从2.0.0版本开始,dataset功能不支持读取压缩的CSV或JSON文件。你介意评论一下你在这个问题上的用例吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64705943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档