我想向數據庫添加大約7億行和2列。使用下面的代碼:如何減少在python中追加SQL數據庫的時間
disk_engine = create_engine('sqlite:///screen-user.db')
chunksize = 1000000
j = 0
index_start = 1
for df in pd.read_csv('C:/Users/xxx/Desktop/jjj.tsv', chunksize=chunksize, header = None, names=['screen','user'],sep='\t', iterator=True, encoding='utf-8'):
df.to_sql('data', disk_engine, if_exists='append')
count = j*chunksize
print(count)
print(j)
它需要很長時間(我估計它需要幾天)。有沒有更有效的方法來做到這一點?在R中,我一直使用data.table包加載大型數據集,只需要1分鐘。 Python中是否有類似的包?作爲一個切點,我想將這個文件實際存儲在我的桌面上。現在,我假設'數據'被存儲爲臨時文件。我將如何做到這一點?
此外,假設我將數據加載到數據庫中,我希望查詢在一分鐘或更短時間內執行。這裏是什麼,我想用Python + SQL做一些僞代碼:
#load data(600 million rows * 2 columns) into database
#def count(screen):
#return count of distinct list of users for a given set of screens
從本質上講,我回到屏幕的數量爲一組給定users.Is的數據太大了,這個任務?我也想把這個表與另一個表合併。 R中fread函數的速度要快多少?
困擾,所以你正在使用SQLite。至於你的問題「是否有與R數據表等價的Python」。熊貓是那個圖書館。你的代碼的慢部分是數據庫寫入。你不能從'df'變量本身來計算不同的用戶嗎?你爲什麼需要SQL? –
我認爲數據庫執行查詢會更快。作爲python的新用戶,我將如何查看df的記錄?如果我打印(DF),我得到的對象名稱,我認爲寫數據到SQL數據庫將更容易編寫查詢方面,我也可以查看我的表的輸出。另外,我不知道在我的pd.read_csv語句中加載數據需要多長時間。 – zorny
在SQL中編寫查詢本身可能會容易很多,是的,但正如您發現的那樣,將數據加載到數據庫中很慢。就個人而言,我建議你看看[SparkSQL](http://spark.apache.org/docs/latest/sql-programming-guide.html#overview),並擔心後面寫入數據庫文件。 –