我試圖在python中使用Pandas的df.to_sql和SQlite3將大約2GB的數據與大約1600萬行的數據放在一起。我的策略是將原始CSV分塊爲更小的數據框,對它們執行一些操作,然後將它們放入SQL數據庫中。Python和Pandas在添加大量數據時SQLite3速度變慢
當我運行這個代碼時,它開始快速,但很快就會變慢。在大約300萬行之後,它會減慢到這樣的程度,因爲它似乎不會在任何實際的時間內完成。這是什麼原因,我能做些什麼呢?我的代碼如下:
def chunk_read_CSV_to_db(database, table, filepath, chunksize, delimiter=','):
start = dt.datetime.now()
conn = sqlite3.connect(database)
index_start = 1
j=0
for df in pd.read_csv(filepath, chunksize=chunksize, iterator=True, encoding='utf-8', sep=delimiter):
j+=1
print '{} seconds: complete {} rows'.format((dt.datetime.now() -start).seconds, j*chunksize)
df.to_sql(name=table, con=conn, flavor='sqlite', if_exists='append')
conn.close()
db_name = 'store_data.db'
f9 = 'xrf_str_geo_ta4_1511.txt'
chunksize = 20000
chunk_read_CSV_to_db(os.path.join(fp, db_name), os.path.splitext(f9)[0], os.path.join(fp, f9), chunksize = chunksize, delimiter='\t')
做什麼?刪除索引,添加數據並在之後創建索引是明智的。請參閱http://stackoverflow.com/questions/788568/sqlite3-disabling-primary-key-index-while-inserting –