微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?