2017-03-27 9 views
1

私は3億1500万行以上の列と1つの列を含む大きなCSVファイルを持っています。結果を得るには、一度に50以上のファイルを処理する必要があります。Pythonで大きなcsvファイルを処理する

私はcsvリーダーを使用して10以上を読んでいるので、12GB以上のRAMが必要であり、痛いほど遅いです。私はメモリを節約するためにファイルの塊だけを読むことができますが、毎回ファイル全体を読むようにファイルを読むのにもっと時間を費やします。

私はそれらをデータベースに読み込んでそこからデータを照会することを考えました。しかし、このアプローチが何らかの形で役立つかどうかはわかりません。誰でもPythonでこのようなシナリオを処理する最も効率的な方法を教えてください。

+0

あなたが行っている操作の種類によって異なります。データベースは1つのオプション、EC2は別のもの、CLIは3番目ですが、これはすべてあなたが何をしているかによって異なります。 –

+0

私は値を受け取り、単純な乗算と加算オプションを実行し、結果を保存し、ファイルの次のチャンクに移動します。 –

+0

問題が不明です。ファイルはどのように関係していますか?なぜ彼らは順次ではなく並列で処理する必要があるのですか?計算を行うために一度に何行のメモリが必要ですか?たとえば、累積合計は一度に1行しか必要としません。 –

答えて

1

あなたはより長い処理パイプラインを持っている場合、また、あなたが4.13に見ることができ、ここで Lazy Method for Reading Big File in Python?

を解決策を見つけるでしょう。 BeazlyとJonesの第3版、Python Cookbookの本にデータ処理パイプラインを作成する。

0

ETLyte、私がソースを公開したツールをご覧ください。 .NETですが、PythonからEXEに呼び出すことができます。それはまだ進行中の作業ですが、私はそれがあなたの状況のた​​めに動作すると思います。あなたはconfig.jsonで指定したいずれかのフォルダFlatfilesフォルダ内の

  1. 場所ファイル、または:ETLyteで

    、ここでの手順になります。

  2. JSONスキーマでそれらを記述し、Schemasフォルダまたは指定した場所に配置します(注:すべてが同じスキーマを持っているとします(あなたはすべて1列だと言っています)、スキーマのflatfileフィールドを
  3. 加算/乗算を実行する場合、その計算を実行する派生列を作成することができます。
  4. 実行ETLyteExe.exeとデータが

に流れるようETLyteはまだ始まったばかりされていますが、ロードマップ上でより多くの機能の多くとたくさん持っています。また、sqlite3をインストールせずにデータを調べることができるように、SQLite DLLをラップする単語補完付きの対話型REPLが付属しています。ツールの概要については、look hereを参照してください。

関連する問題