2017-03-27 1 views
1

3 억 1,500 만 개가 넘는 행과 하나의 열을 포함하는 큰 CSV 파일이 있습니다. 결과를 얻으려면 한 번에 50 개 이상의 파일을 처리해야합니다.파이썬에서 대형 csv 파일 처리

csv 리더기를 사용하여 10 개가 넘는 데이터를 읽었을 때 12GB 이상의 RAM이 필요하고 매우 느립니다. 메모리를 절약하기 위해 파일의 덩어리 만 읽을 수 있지만 파일을 읽을 때마다 더 많은 시간을 할애하여 매번 전체 파일을 읽습니다.

데이터베이스에로드하고 거기에서 데이터를 쿼리하는 방법에 대해 생각해 보았습니다. 그러나이 방법이 어떤 식 으로든 도움이 될지 확신 할 수 없습니다. 누구든지 Python에서 이러한 시나리오를 처리하는 가장 효율적인 방법을 알려주시겠습니까? 당신은 더 이상 처리 파이프 라인이있는 경우

+0

수행중인 조작 유형에 따라 다릅니다. 데이터베이스는 하나의 옵션이고, EC2는 다른 것이며, CLI는 세 번째이지만,이 모든 것은 당신이하는 일에 달려 있습니다. –

+0

값을 가져 와서 간단한 곱셈과 덧셈 옵션을 수행하고 결과를 저장 한 다음 파일의 다음 청크로 이동합니다. –

+0

문제점이 구체적이지 않습니다. 파일이 서로 어떻게 관련이 있습니까? 순차적으로 처리하는 것이 아니라 병렬 처리해야하는 이유는 무엇입니까? 계산을 수행하기 위해 한 번에 몇 개의 메모리가 필요합니까? 예를 들어, 누적 합계는 한 번에 한 행만 필요합니다. –

답변

1

당신은, 또한 여기 Lazy Method for Reading Big File in Python?

해결책을 찾을 것입니다, 당신은 제 4.13로 볼 수있다. Beazly와 Jones가 작성한 Python Cookbook, 제 3 판, 데이터 처리 파이프 라인 작성하기.

0

내가 오픈 한 도구 ETLyte을 확인하십시오. 그것은 .NET이지만 Python에서 EXE를 호출 할 수 있습니다. 아직 진행중인 작업이지만 상황에 맞게 작동 할 것입니다. 당신이 config.json에서 지정한 어느 폴더 Flatfiles 폴더에

  1. 배치 파일 또는 : ETLyte와

    , 여기에 단계가 될 것입니다.

  2. JSON 스키마로 설명하고 Schemas 폴더 또는 사용자가 지정한 위치에 배치하십시오 (참고 : 스키마가 모두 단일 열이라고 말한 경우) flatfile 필드를 스키마로 변경하면됩니다.
  3. 덧셈/덧셈을 수행 할 때 계산을 수행하는 파생 된 열을 만들 수 있습니다.
  4. 실행 ETLyteExe.exe 및 데이터가 막 시작되는

ETLyte에 흐를 수 있도록하지만 많은 기능과 더 로드맵에 많이 있습니다. 또한 sqlite3을 설치하지 않고도 데이터를 조사 할 수 있도록 SQLite DLL을 래핑하는 단어 완성과 함께 대화 형 REPL이 제공됩니다. 이 도구의 개요는 look here입니다.