내 노트북 (4GB RAM)을 통해 SQL Server로 마이그레이션하려는 레코드가 약 3 백만 개에 이르는 csv 파일이 있습니다.팬더를 사용하여 DB로 큰 csv 가져 오기
pandas
성공적으로 DataFrame (pd.read_csv()
)에 파일을 읽고,하지만 난 (.to_sql()
)를 마이그레이션 할 때 나는 Memory Error
가 나타납니다
---------------------------------------------------------------------------
MemoryError Traceback (most recent call last)
<ipython-input-12-94c146c2b7b7> in <module>()
----> 1 csv.to_sql(name='stats', con=engine, if_exists='append')
C:\Python27\lib\site-packages\pandas\core\generic.pyc in to_sql(self, name, con, flavor, schema, if_exists, index, index_label, chunksize, dtype)
964 self, name, con, flavor=flavor, schema=schema, if_exists=if_exists,
965 index=index, index_label=index_label, chunksize=chunksize,
--> 966 dtype=dtype)
967
968 def to_pickle(self, path):
C:\Python27\lib\site-packages\pandas\io\sql.pyc in to_sql(frame, name, con, flavor, schema, if_exists, index, index_label, chunksize, dtype)
536 pandas_sql.to_sql(frame, name, if_exists=if_exists, index=index,
537 index_label=index_label, schema=schema,
--> 538 chunksize=chunksize, dtype=dtype)
539
540
C:\Python27\lib\site-packages\pandas\io\sql.pyc in to_sql(self, frame, name, if_exists, index, index_label, schema, chunksize, dtype)
1170 schema=schema, dtype=dtype)
1171 table.create()
-> 1172 table.insert(chunksize)
1173 # check for potentially case sensitivity issues (GH7815)
1174 if name not in self.engine.table_names(schema=schema or self.meta.schema):
C:\Python27\lib\site-packages\pandas\io\sql.pyc in insert(self, chunksize)
715
716 chunk_iter = zip(*[arr[start_i:end_i] for arr in data_list])
--> 717 self._execute_insert(conn, keys, chunk_iter)
718
719 def _query_iterator(self, result, chunksize, columns, coerce_float=True,
C:\Python27\lib\site-packages\pandas\io\sql.pyc in _execute_insert(self, conn, keys, data_iter)
689
690 def _execute_insert(self, conn, keys, data_iter):
--> 691 data = [dict((k, v) for k, v in zip(keys, row)) for row in data_iter]
692 conn.execute(self.insert_statement(), data)
693
MemoryError:
저를 성공적으로 마이그레이션을 할 수 있도록 할 다른 방법이 있나요?
- 덩어리에 CSV를 읽은 후 SQL DB에 기록하고
- 반복 또는 당신이
그래서에 대한 DB에 덩어리 작성할 수 있습니다
에 대한 PARAM 당신은 덩어리가 이렇게 한 번에 50,000 행을 읽어 SQL로 작성하고 반복 할 수있다, ['read_csv'] (HTTP위한'chunksize'의 PARAM있다 /pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html#pandas.read_csv) – EdChum
실제로 ['to_sql']에 대한'chunksize' 매개 변수가 있습니다 (http://pandas.pydata.org /pandas-docs/stable/generated/pandas.DataFrame.to_sql.html#pandas.DataFrame.to_sql) 기본적으로 이것은 None입니다. 이는 모든 행을 한 번에 작성한다는 것을 의미합니다.이 값을 일부 값으로 설정하고 당신은 간다 – EdChum