2017-09-28 12 views
1

サイズが〜5-6GB(行数百万)の大きなCSVファイルがあります。だからパンダはそれを扱うことができません(私のラム容量は2GBなので、メモリエラーが出ます)。 Hadoopを使用して(つまり、各ノードの各ファイルのブロックを保存して)、起動する方法と、各ブロックで操作を実行するHadoopデータベース(Hive、HBase、PIG)を使用します。質問に間違いがある場合は、私がこの分野の初心者であることを教えてください。 また、hadoopではなく、この巨大なCSVファイルをSQLまたはPostgresに保存することはできますか? ありがとうございます。Pythonで大容量のcsvファイルを保存、取得(および実行)する方法はありますか?

答えて

1

パンダは、ファイルをチャンクで読み取ることで大きなファイルを処理できます。 pd.read_csv()関数にchunksizeパラメータを指定すると、TextFileReaderが返され、メモリに収まる各チャックの操作を繰り返して反復処理を実行できます。あなたが集計やチャックのサイズを小さくし、してはならない各チャック上で行う

reader = pd.read_csv('your_file.csv', chunksize=1000) 
for chunk in reader: 
    # do operations on chuck which is a dataframe with 1000 rows. 

注意、操作:ここで

は、一度に1000行を読み取り、各チャンクで操作を行う例です。それらをリストに格納してください。そうしないと、メモリ不足になります。 DataFrameの最終サイズを減らさないように列の操作を行う必要がある場合は、各チャックで操作した後、結果をファイルに保存します。

+0

は答えてくれてありがとう、私はチャンクCSVをしたいし、それに対して操作を実行しないでください。私は最初にこの全文データをデータベースに移動することができます(私はSQLを試しましたが時間がかかりました)。そこから、特定の列のセットを取り出し、いくつかの操作を実行し、その結果をそのストアに戻すことができますデータベース。だから私はどのデータベースを使用する必要がありますか(Pythonでうまくいく大きなデータ・データベース)。 –

0

通常のテキストファイルのようにいつでも読むことができ、行ごとに解析することができます。あなたはそれでワトーバー治療をすることができます。以下のような

何か:

Header = [] 
with open('CSVFile.name' ], 'r') as InputFile: 
    for Line in InputFile : 
    PureData = re.split(Separator, Line[:-1]) 
    # assume 1st line is header 
    if not Header : 
     Header = PureData 
    else : 
     MyRecord = map(lambda x, y: { x, y }, Header, PureData) 

     print(str(MyRecord)) 
+0

ありがとう、私はcsvを分割して操作を実行したくありません。私は最初にこの全文データをデータベースに移動することができます(私はSQLを試しましたが時間がかかりました)。そこから、特定の列のセットを取り出し、いくつかの操作を実行し、その結果をそのストアに戻すことができますデータベース。どのデータベースを使用すればいいですか(Pythonでうまくいく大きなデータ・データベース) –

+0

DB内のデータを変更する必要がなければ、elasticsearchのようなものを見てください。さまざまな "視点"からの検索、特に巨大なDB上での検索では非常に効率的です。ログスタッチがあなたのcsv 2 ELKフィンガーを鼻で処理するようなツールです。 – NeronLeVelu

関連する問題