我想向数据库添加大约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),并担心后面写入数据库文件。 –