【发布时间】:2015-09-24 21:02:05
【问题描述】:
我有两个表:trainSearcStream 和 SearchInfo。我的代码应该基于名为 SearchID 的公共列合并两个表。问题是代码运行了一段时间,然后在我的 Eclipse 控制台中没有报告任何错误就终止了。每个表中的行数是:trainSearchStream|392,356,948 和 搜索信息|112,159,462。我的数据库(包括其他表)的大小是 40GB。 更新:当我在终端运行代码时,我收到一条消息:'killed: 9'
import pandas as pd
import sqlite3
# Create connection.
con = sqlite3.connect(path + 'database.sqlite')
#read into a data frame
df = pd.read_sql_query("SELECT * FROM trainSearchStream, SearchInfo WHERE trainSearchStream.SearchID = SearchInfo.SearchID;", con)
#save to file
df.to_csv(path + 'traindata.csv',index=False,encoding='utf-8')
【问题讨论】:
-
我想它在
read_sql_query调用期间终止,而不是to_csv调用?您知道要查询的表的大小是多少吗?你有多少内存? 40GB 不适合典型笔记本电脑的内存。 -
顺便说一句,如果您上面的唯一目标是将数据导出到 csv,那么可能有比往返 python 更好的方法来做到这一点。参见例如stackoverflow.com/questions/6076984/…
-
几个问题:您的查询结果的大小是多少? (你可以在 python 之外的其他地方执行它)你知道你的 python 是 32 位还是 64 位?我猜您的查询结果会加载到 RAM 中,而您不太可能拥有 40GB 的 RAM。也许它超过 2GB,而您使用的是 32 位版本,这会导致问题。
-
我不是 python 人,所以我不知道你的代码到底做了什么,但我认为 pd.read_sql_query 会将你的查询结果加载到内存中。在这种情况下,由于结果的大小,这不是一个好主意。我会流式传输查询,而不是逐行编写 csv。对于小的结果,这种方式会更慢。
-
@joris 是的,它在 to_csv 之前终止。我有一台具有 16Gb 内存和 500Gb 闪存的笔记本电脑。我也有 .tsv 格式的表格。在该格式中,它们的大小为 9.47Gb 和 11.02 Gb。我的目标是根据一个公共列连接几个表,然后将它们导出到一个 cvs 文件。我尝试了熊猫合并功能。但我的代码会终止。当我在终端运行 pandas 代码时,我收到一条消息:'killed: 9'