如何解决使用pyarrow读取大型压缩json文件,类似于pandas阅读器功能
我有一个很大的压缩json文件,未压缩的单个文件大约为128GB。使用.gz压缩,文件约为21GB。我想利用pyarrow来分批读取文件并将其转换为镶木地板数据集。我想模仿熊猫的阅读器功能,但遇到了一些问题。
我有以下代码工作,其中通过pandas read_json将压缩的json文件读入块中,然后将这些块转换为apache箭头表,然后写出至镶木地板数据集:
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,而不必先拉入大块的熊猫数据帧,然后再提取到apache arrow表中。首先,鉴于apache arrow与pandas read_json的多线程读取功能,我想在性能上有所提高。
我尝试使用pyarrow.json类(https://arrow.apache.org/docs/python/generated/pyarrow.json.ReadOptions.html#pyarrow.json.ReadOptions)的ReadOptions,但是,当我运行以下代码时,在我看来,apache arrow首先在读取内存之前先解压缩内存中的整个文件。根据我在block_size参数中设置的块大小,给定文件的大小,如果我让代码运行,我将出现内存不足的错误。
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
来研究类似于文件流读取器的输入流功能,但是不确定这是否是正确的路由。
欢迎任何建议。
解决方法
这听起来类似于https://issues.apache.org/jira/browse/ARROW-10372。从2.0.0版本开始,数据集功能不支持读取压缩的CSV或JSON文件。您介意在此问题上评论您的用例吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。