我有一个存档的CSV文件形式的巨大的表(约60 GB).我想将其转换为SQLite文件.
我现在做的如下:
import pandas import sqlite3 cnx = sqlite3.connect('db.sqlite') df = pandas.read_csv('db.gz', compression='gzip') df.to_sql('table_name', cnx)
它适用于较小的文件,但有巨大的文件,我有内存问题.问题是pandas将整个表读入内存(RAM),然后将其保存到SQLite文件中.
这个问题有优雅的解决方案吗?
我没有使用那种大小的CSV做任何工作,但这听起来像是Odo可能快速解决的问题.
我粗略地检查了文档,看起来他们已经写了一些内容,解决了大于内存的CSV解析到SQL数据库的问题,这些SQL数据库专门将SQLite3称为目标.
以下是他们发布用于解析33 GB文本文件的示例.
In [1]: dshape = discover(resource('all.csv')) In [2]: %time t = odo('all.no.header.csv', 'sqlite:///db.db::nyc', ...: dshape=dshape) CPU times: user 3.09 s, sys: 819 ms, total: 3.91 s Wall time: 57min 31s