나는 매우 큰 csv 파일이 있는데 평균을 얻는 일부 선택 쿼리를 사용해야합니다 ... 메모리가 부족하여 한 줄씩 읽음으로써 정상적으로 수행 할 수 없습니다.큰 csv 파일을 사용하는 방법
다음 코드는 짧은 csv 파일에서는 잘 작동하지만 거대한 코드에서는 제대로 작동하지 않습니다. 대용량 csv 파일 용으로이 코드를 편집 할 수 있으면 감사하겠습니다.
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Mu {
public void Computemu()
{
String filename="testdata.csv";
File file=new File(filename);
try {
Scanner inputstream=new Scanner(file);//Scanner read only string
// String data=inputstream.next();//Ignore the first line(header)
double sum=0;
double numberOfRating=0;
while (inputstream.hasNext())
{
String data=inputstream.next();//get a whole line
String[] values= data.split(";");//values separate by;
double rating=Double.parseDouble(values[2].replaceAll("\"", ""));//change value to string
if(rating>0)//do not consider implicit ratings
{
sum+=rating;
numberOfRating++;
}
}
inputstream.close();
System.out.println("Mu is"+ (sum/numberOfRating));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
:.. 그것은 단지 –
합니까 스캐너 부하 한 번에 메모리에 하나 개의 라인을 가지고 전체 파일을 먼저 메모리에 저장합니까? http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html –