我在 Ruby 中读取大型 JSON 文件 (2.9GB) 时遇到问题。我正在使用这段代码
json_file = File.read(filename)
results = JSON.parse(json_file)
当我尝试读取该文件时,出现错误:
Errno::EINVAL: Invalid argument - <filename>
我已经用较小的文件测试了相同的代码,它工作得很好。为了验证文件是否正确写入,我尝试使用 python 读取它并且它有效。
JSON.parse 文件的大小有限制吗?如果是这样,您能推荐一个替代方案吗?
我查看了 msgpack
来减小文件的大小,但不幸的是,我受到无法安装 gems 的限制。
最佳答案
这是IO.read
的限制。
您可以将文件分割成更小的部分(例如 1 GB)并单独读取它们:
dirname = File.dirname(filename)
`split -b 1024m #{filename} #{filename}.parts.`
Dir.chdir(dirname)
parts = Dir["#{filename}.parts.*"]
json = ''
parts.each do |partname|
json += File.read(partname)
File.delete(partname)
end
results = JSON.parse(json)
请耐心等待,这可能需要一段时间。
关于ruby - 在 Ruby 中读取大型 JSON 文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35420337/