gpt4 book ai didi

java - 如何读取多个csv并合并

转载 作者:行者123 更新时间:2023-12-02 03:11:48 26 4
gpt4 key购买 nike

我有 39 个 csv 文件,它们占用大量内存。我想通过Java加载这个文件并将其设置为一个变量。下面的段落是我的编码,适用于小尺寸文件,但不适用于大尺寸文件。文件大小通常在 100mb 到 800mb 左右。我想加载目录中的 39 个文件并将它们放入一个二维数组中。

public static String readCSV(File csvFile) {
BufferedReader bufferedReader = null;
StringBuffer stringBuffer = new StringBuffer();

try {
bufferedReader = new BufferedReader(new FileReader(csvFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
}

try {
String temp = null;
while((temp = bufferedReader.readLine()) != null) {
stringBuffer.append(temp+","); // temp 에 저장되어있는 한 줄을 더한다.
}

System.out.println(stringBuffer);
} catch (IOException e) {
e.printStackTrace();
}

// -10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,,,,,,,,,,1,2,3,4,5,6,7,8,9,10, 반환
return stringBuffer.toString();
}

public static String[] parse(String str) {
String[] strArr = str.split(","); // 쉼표가 1개인 것을 기준으로 나누어서 배열에 저장

return strArr;
}

public static void main(String[] args) throws IOException {

//mergeCsvFiles("sample", 4, "D:\\sample_folder\\" + "merge_file" + ".csv");


String str = readCSV(new File("D:/sample_folder/sample1.csv"));
String[] strArr = parse(str); // String 배열에 차곡차곡 담겨서 나온다.
int varNumber = 45;
int rowNumber = strArr.length/varNumber;

String[][] Array2D = new String[varNumber][rowNumber];
for(int j=0;j<varNumber;j++)
{
for(int i=0; i<rowNumber;i++)
{
String k = strArr[i*varNumber+j];
Array2D[j][i]= k;
}
} //2D array 배열을 만들기

//String[][] naArray2D=removeNA(Array2D,rowNumber,varNumber); //NA 포함한 행 지우기





// /* 제대로 제거 됐는지 확인하는 코드
for(int i=0;i<varNumber;i++){
for(int j=0;j<16;j++){
System.out.println(Array2D[i][j]);
}
System.out.println("**********************NA제거&2차원 배열**********************");
}
// */

}
}

最佳答案

根据您提到的文件大小,您可能会 run out of memory in the JVM

可能就是您最大的 800 MB 的文件无法加载到内存中的原因。您不仅将这 800MB 加载到内存中,而且还增加了您正在使用的数组的开销。换句话说,您正在使用 1600MB + all of the extra overhead cost of each array, which becomes sizeable .

我敢打赌,在两种情况下文件格式都是完美的假设下,您超出了内存限制。虽然我无法确认,因为我不知道您的 JVM、内存消耗,也不具备解决这些问题所需的资源,但是否属于这种情况由您决定。

另外,我不知道 - 也许我正确地阅读了你的代码,但它似乎不会做我认为你想要它做的事情。也许我错了,我不知道你想做什么。

关于java - 如何读取多个csv并合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40924602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com