我使用Python 2.7版与大熊猫0.20.2读取多个CSV文件到一个数据帧(一次一个),在DF内选定系列创建列表,然后转储信息导入到MySQL数据库中。好奇的行为是,第一个循环工作正常(尝试各种文件,并且第一个总是正常工作),但随后的写入MySQL挂起时存在大量内存泄漏,直到出现segmentation fault (core dumped)
错误。的Python 2.7 /熊猫/ MySQL的分段错误
我将在这里给出一个小例子:
import pandas as pd
import MySQLdb
file_list = ['file1.csv','file2.csv']
db = MySQLdb.connect(...)
with db as c:
c.execute("USE my_db")
for f in file_list:
df = pd.read_csv(f, parse_dates = ['date_time'])
sql_dict = {
'date_time': df['date_time'].dt.strftime('%Y-%m-%d %H:%M:%S').tolist(),
'num':df['num'].tolist()
}
columns = sql_dict.keys()
values = sql_dict.values()
join_string = "(" + ",".join("%s" for c in columns) + ")"
query = "REPLACE INTO std_ints ({}) VALUES ".format(", ".join(columns)) + ",".join(join_string for _ in values[0])
flat_vals = [ i for s in zip(*values) for i in s ]
c.execute(query, flat_vals)
db.commit()
db.close()
第一个循环执行完美,然后通过第二循环,直到c.execute(query, flat_vals)
线在那里挂运行,永远不会完成。
我试过一百万次各种迭代的.commit()
,关闭或不关闭db
,都无济于事。
我不能说这是否是一个错误的熊猫或MySQL错误,但dataframes既快速生成并采取了完全相同的内存空间,所以我想这是一个MySQL的问题。
我也读了this thread regarding multithreading,并在file_list
中包含了每个循环的新连接,也无济于事。
任何帮助,将不胜感激。
如何安装MySQL驱动程序?另外,请检查客户端库版本是否与服务器版本匹配。有时'pip uninstall'和'pip install'会再次提供帮助,因为它会重建二进制文件并正确链接到MySQL客户端库。 – tungd
@ tungd - 感谢您的建议,如果没有其他的工作,我会给它一个镜头。鉴于我可以使用各种数据集将数据插入数据库,我倾向于认为这不是原因......但我很容易被误解。 – pshep123