これに似た質問をたくさん見ましたが、実際に一致するものはありませんでした。他のほとんどの質問は速度に関係しているようでした。私が経験しているのは、ローカルボックスの1.1gigファイルにある単一のjson辞書で、次の行に沿って何かを使用してロードしようとすると、16ギガバイトのメモリをすべて消費します。
f = open(some_file, "rb")
new_dictionary = json.load(f)
これは、使用しているjsonライブラリ(ujson、json、yajlを試しました)に関係なく、またバイトストリームとして読み込むかどうかに関係なく発生します。これは私にはまったく意味がありません。クレイジーなメモリ使用量とは何ですか?どうすればそれを回避できますか?
それが役立つ場合、辞書はネストされた辞書の集まりであり、すべてのintが他のintを指します。サンプルは次のようになります。
{"0":{"3":82,"4":503,"15":456},"956":{"56":823,"678":50673,"35":1232}...}
更新:これをsimplejsonで実行すると、実際には8ギガしかかかりません。なぜそれが他のすべてよりもはるかに少ないのか分かりません。
更新2:それで私はもう少し調査をしました。私は辞書にsimplejsonをロードし、すべてのキーをintに変換してみました(文字列がより多くのスペースを占める可能性があるというLioriの提案による)。スペースは8ギグで同じままでした。次に、gc.collect()を実行するというWinstonEwertの提案を試しました。スペースはまだ8ギガのままでした。最後に、イライラして好奇心をそそられ、新しいデータ構造を選択し、Pythonを終了して、リロードしました。見よ、それでも8ギガかかる。Pythonは、大きな2D辞書用にそれだけのスペースが必要だと思います。確かにイライラしますが、少なくとも今では、simplejsonを使用してロードする限り、JSONの問題ではないことがわかります。