1,000,000 개의 Java CSV 파일을 읽으려고합니다. OpenCSV 라이브러리를 사용하고 있는데, 30,000 줄의 작은 파일에서 잘 작동합니다. 30 분 안에 처리합니다. 그러나 백만 줄의 파일을 읽으려고하면 끝나지 않습니다.Java에서 큰 CSV 파일 읽기
지금 나는 그것이 실제로 중지 할 때,보고, 테스트, 이진 검색의 내 자신의 버전을 사용하여, 내가 먼저 등 50 만 다음 라인, 25 만 등을 읽으려고, 나는 그것을 발견 쉽게은 145k 행을 표시하며 0.5-0.7sec이고 150k도 완료되지 않습니다.
저는 완전히 검색 했으므로 BufferedReader
, BufferedInputStream
등을 사용하여 여러 가지 솔루션을 찾았습니다. 해결 된 해결책은 없습니다. 여전히 145-150k 행 사이에서 실패합니다.
try {
// BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("myFile.csv"));
CSVReader csvReader = new CSVReader(new InputStreamReader
(new BufferedInputStream(new FileInputStream("myFile.csv"), 8192 * 32)));
try {
int count = 0;
String[] line;
long timeStart = System.nanoTime();
while((line = csvReader.readNext()) != null){
count ++;
if(count >= 150000){
break;
}
}
long timeEnd = System.nanoTime();
System.out.println("Count: " + count);
System.out.println("Time: " + (timeEnd - timeStart) * 1.0/1000000000 + " sec");
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
System.out.println("File not found");
}
당신은 내가 더 큰 버퍼를 설정 시도 볼 수 있듯이이 내 코드의 관련 부분입니다
(145000와 150000 교환 프로그램이 < 1 초에 실행됩니다 것입니다) 크기뿐. 나는 Readers
, Input Streams
등의 다양한 조합을 시도했지만 아무런 차이를 만들지 않았습니다.
나는 이것을 어떻게 할 수 있는지 궁금합니다. 한 번에 100k 라인을 읽고, 다음 100k를 계속 읽는 방법이 있습니까?
또한 저는 OpenCSV
라이브러리가 반드시 포함되어 있지 않은 다른 솔루션에 대해 열려 있습니다. 방금 csv 파일을 구문 분석하기 위해 단순성을 위해이 파일을 사용했습니다.
'끝내지 않는다'는 말은 .... 실제로 무엇입니까? 교착 상태, 메모리 부족 등 ... 디버거를 사용하여 최대 처리량을 확인하거나 루프에 sysouts를 넣어 처리 중인지 확인하십시오. – Adam