【问题标题】:how to read multiple csv and merge如何读取多个csv并合并
【发布时间】:2016-12-02 04:04:57
【问题描述】:

我有 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차원 배열**********************");
    }           
//      */

    }
}

【问题讨论】:

    标签: java csv


    【解决方案1】:

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

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

    我敢打赌,假设文件格式在这两种情况下都是完美的,您会超出内存限制。虽然我无法确认,因为我不知道您的 JVM、您的内存消耗,也没有必要的资产来解决这些问题,但由您决定是否是这种情况。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-09
      • 2017-06-08
      • 2018-02-01
      • 2021-05-17
      • 2023-02-14
      • 2013-07-05
      • 1970-01-01
      • 2014-07-22
      相关资源
      最近更新 更多