我在Ruby中读取大型JSON文件(2.9GB)时遇到问题。我正在使用此代码
json_file = File.read(filename)
results = JSON.parse(json_file)
当我尝试读取文件时,我收到错误:
Errno::EINVAL: Invalid argument - <filename>
我用较小的文件测试了相同的代码,它工作正常。为了验证文件是否正确写入,我试图用python读取它并且它可以工作。
JSON.parse的文件大小是否有限制?如果是这样,你能推荐一个替代方案吗?
我查看了msgpack
以减少文件的大小,但遗憾的是我因为无法安装宝石而受到限制。
答案 0 :(得分:2)
这是IO.read
的限制。
您可以将文件拆分为较小的部分(例如,1千兆字节)并单独阅读:
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)
请耐心等待,这可能需要一段时间。