如何在 R/Python 中迭代/循环一个大型(>2GB)JSON 数据集? [复制]

Posted

技术标签:

【中文标题】如何在 R/Python 中迭代/循环一个大型(>2GB)JSON 数据集? [复制]【英文标题】:How to iterate/ loop through a large (>2GB) JSON dataset in R/ Python? [duplicate] 【发布时间】:2017-04-22 19:05:21 【问题描述】:

我试图使用 R 对大型 (2.7 GB) JSON 数据集进行一些探索性分析,但是,该文件甚至没有首先加载。在寻找解决方案时,我发现我可以以较小的块处理数据,即通过迭代较大的文件或对其进行下采样。但我不太确定如何使用 JSON 数据集来做到这一点。我也想过将原始 JSON 数据转换为 .csv,但在环顾四周后,该选项看起来并没有那么有用。

这里有什么想法吗?

【问题讨论】:

您是否尝试将整个文件加载到内存中?然后然后探索它? @cricket_007 是的,我就是这么做的 我真的不知道 R,但我可能建议您研究一下 Apache Spark。 databricks.com/blog/2015/02/02/… Pandas 应该能够读取 JSON 文件。不过没试过大文件 @cricket_007 谢谢!我对 SQL 的经验为零,但它看起来很有帮助。 【参考方案1】:

jsonlite R 包支持流式传输您的数据。这样就不需要将所有的 json 数据读入内存。有关详细信息,请参阅 jsonlite 的文档,特别是 stream_in 函数。


或者:

我会将 json 转储到 mongo 数据库并处理其中的数据。您需要安装 mongodb,并开始运行 mongod。之后,您可以使用mongoimport 将 json 文件导入数据库。

之后,您可以使用mongolite 包从数据库中读取数据。

【讨论】:

我一定会试试的,谢谢。 完整的数据库安装可能有点过头了,这取决于持久性的需要或使用它提供的内置查询功能。 @cricket_007 你是对的,虽然让 mongo 运行起来并不难。我添加了一个使用流处理的替代方案。这可能比使用 mongodb 更容易,因为流已经自动处理了所有块中的读取。 在 docker 中运行 mongo 并不难,不 :) 我只是说看起来像一把锤子 我同意,jsonlite 允许您流式传输 json,这是一个更轻量级的解决方案。

以上是关于如何在 R/Python 中迭代/循环一个大型(>2GB)JSON 数据集? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在C中创建连续循环,其中循环的每次迭代在其内部循环的每次迭代中发生一次

python_如何在一个for循环中迭代多个可迭代对象?

如何使用循环中迭代的变量在 for 循环中创建数据框

如何在 PHP 的 foreach 循环中优化大型 mySQL?

如何在循环中的每次迭代中保存具有不同名称的文件? MATLAB

如何在表格视图单元格中快速迭代for循环