複数のCSVファイルを(一度に1つずつ)読み込み、DF内で選択したシリーズからリストを作成し、それをダンプするには、pandas 0.20.2のpython 2.7を使用しています情報をMySQLデータベースに格納します。Python 2.7/Pandas/MySQLセグメンテーションフォールト
最初のループがうまく動作し(さまざまなファイルを試したが、最初のものは常にうまくいく)、後でMySQLへの書き込みは、segmentation fault (core dumped)
エラーが発生するまで大きなメモリリークでハングします。
私はここで、最小限の例をあげてみます:
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)
ラインまで、第2ループを実行し、完了することはありません。
私は.commit()
の百万回のさまざまな反復を試みましたが、閉鎖するか閉鎖するかはdb
でした。
これはパンダエラーかMySQLエラーかはわかりませんが、データフレームはすぐに生成され、メモリ内の同じ正確なスペースを占めるので、MySQLの問題だと思っています。
また、this thread regarding multithreadingを読んで、file_list
の各ループに新しい接続を含めても、役に立たない。
ご協力いただければ幸いです。
どのようにMySQLドライバをインストールしますか?また、クライアントライブラリのバージョンがサーバーのバージョンと一致していることを確認します。 'pip uninstall'と' pip install'は、バイナリを再構築し、MySQLクライアントライブラリへのリンクを正しく再現するので、時には 'pip uninstall'と' pip install'を助けます。 – tungd
@tungd - 提案していただきありがとうございます。他に何もない場合、私はそれを打ち明けます。さまざまなデータセットを使用してデータベースにデータを挿入できるという事実を考えれば、それが理由ではないと思う傾向がありますが、私は間違いやすいでしょう。 – pshep123