นี่เป็นเธรดที่เก่ากว่า แต่ฉันแค่ต้องการทิ้งวิธีแก้ปัญหาของฉันที่นี่ ตอนแรกฉันลองใช้chunksize
พารามิเตอร์ (แม้จะมีค่าค่อนข้างน้อยเช่น 10,000) แต่ก็ไม่ได้ช่วยอะไรมาก ยังคงมีปัญหาทางเทคนิคเกี่ยวกับขนาดหน่วยความจำ (CSV ของฉันคือ ~ 7.5 Gb)
ตอนนี้ฉันเพิ่งอ่านไฟล์ CSV ในรูปแบบ for-loop และเพิ่มเข้าไปในฐานข้อมูล SQLite ทีละขั้นตอน:
import pandas as pd
import sqlite3
from pandas.io import sql
import subprocess
in_csv = '../data/my_large.csv'
out_sqlite = '../data/my.sqlite'
table_name = 'my_table'
chunksize = 100000
columns = ['molecule_id','charge','db','drugsnow','hba','hbd','loc','nrb','smiles']
nlines = subprocess.check_output('wc -l %s' % in_csv, shell=True)
nlines = int(nlines.split()[0])
cnx = sqlite3.connect(out_sqlite)
for i in range(0, nlines, chunksize):
df = pd.read_csv(in_csv,
header=None,
nrows=chunksize,
skiprows=i)
df.columns = columns
sql.to_sql(df,
name=table_name,
con=cnx,
index=False,
index_label='molecule_id',
if_exists='append')
cnx.close()