2016-12-21 1 views
1

Postgres 데이터베이스에서 Python으로 테이블을 읽으려고합니다. 테이블에는 약 800 만 개의 행과 17 개의 열이 있으며 DB에는 622MB의 크기가 있습니다.Pandas가 read_sql_table에 너무 많은 메모리를 사용하고 있습니다.

psql을 사용하여 전체 테이블을 csv로 내보내고 pd.read_csv()를 사용하여 읽을 수 있습니다. 완벽하게 작동합니다. 파이썬 프로세스는 약 1GB의 메모리 만 사용하며 모든 것이 좋습니다.

우리가해야 할 일은이 풀이 자동화되어야한다는 것이므로 DB에서 직접 pd.read_sql_table()을 사용하여 테이블을 읽을 수 있다고 생각했습니다. 다음 코드 사용

import sqlalchemy 
engine = sqlalchemy.create_engine("postgresql://username:[email protected]:5432/db") 
the_frame = pd.read_sql_table(table_name='table_name', con=engine,schema='schemaname') 

이 방법은 많은 메모리를 사용하여 시작됩니다. 작업 관리자를 사용하여 메모리 사용량을 추적 할 때 최대 16GB의 메모리를 사용하여 컴퓨터를 정지시킬 때까지 파이썬 프로세스의 메모리 사용량이 올라가고 등반하는 것을 볼 수 있습니다.

왜 이런 일이 벌어지고 있는지에 대한 아이디어는 높이 평가됩니다.

+0

chunkksize 인수가 있는지 확인하고 청크로 데이터 프레임을 읽습니다. –

답변

2

인수가 chunksize으로 설정되어야 팬더가 더 작은 데이터 덩어리를 반복 할 수 있습니다. 이 게시물을 참조하십시오 : https://stackoverflow.com/a/31839639/3707607

+0

흥미 롭습니다. 이것은 확실하게 작동합니다. 문제는 대답으로 표시됩니다. 나는 아직도 데이터베이스에서 전체 데이터 프레임을 가져 오는 것이 csv에서 그것을 읽는 것보다 10 배 더 많은 메모리를 필요로하는지 확신 할 수 없다. – user4505419

관련 문제