[解決済み] かなり大きなJSONファイルの読み込み [重複]。
質問
重複の可能性があります。
大きなJSONファイルを読み込むためのメモリ効率的で高速な方法はありますか?
だから私はいくつかのかなり大きなjsonエンコードされたファイルを持っています。最も小さいものは 300MB ですが、これは圧倒的に小さいものです。残りは数 GB で、約 2GB から 10GB 以上まであります。
そのため、Python でファイルを読み込もうとすると、メモリ不足になるようです。私は現在、このようなものを扱うのにどれくらい時間がかかるか、これからどこに行くべきか確認するために、いくつかのテストを実行しています。以下は、私がテストに使っているコードです。
from datetime import datetime
import json
print datetime.now()
f = open('file.json', 'r')
json.load(f)
f.close()
print datetime.now()
あまり驚くことではありませんが、Pythonは私にMemoryErrorを与えました。json.load()がjson.loads(f.read())を呼び出したようで、これは最初にメモリにファイル全体をダンプしようとしていますが、これは明らかにうまくいきません。
私がこれをきれいに解決することができる任意の方法は?
これは古いものですが、重複していないと思います。回答は同じですが、質問が異なります。重複する質問では、大きなファイルを効率的に読み取る方法が質問されていますが、この質問では、メモリにまったく入らないようなファイルを扱っています。効率は必要ありません。
どのように解決するのですか?
ここでの問題は、JSON が形式として、一般に完全にパースされ、その後インメモリで処理されることです。このような大量のデータでは、明らかに問題があります。
この解決策は、データをストリームとして扱うことです。ファイルの一部を読み取り、それを処理し、それを繰り返します。
最良の選択肢は、次のようなものを使用することです。 ijson - のような、ブロックファイルとしてではなく、ストリームとしてJSONを扱うモジュールを使うのが一番良いようです。
編集: また、一見の価値があるのは
kashifのコメント
について
json-streamer
そして
ヘンリック・ハイノ氏のコメント
について
bigjson
.
関連
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例