gpt4 book ai didi

java - OutOfMemoryError : Java heap space: Trying to convert a ~5. 700万条记录数据集

转载 作者:行者123 更新时间:2023-11-30 04:45:13 26 4
gpt4 key购买 nike

我有一个稀疏的 2D 数据集,其中包含大约 600 万条记录,每条记录最多包含大约 20 个特征。我想将其转换为只有零和一的非稀疏二维数据集,但我不断收到 OutOfMemoryError。

这是我的数据集的示例:

1: 1723762 2737 2 283
2: 239 220 12 19237 2795
3: 3910 2931 86043 26354 349874 73736 2611 93921 4123830
4: 5
5: 4728 2
...(up to ~6mil)

我想把它转换成:

0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...(up to ~6mil)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
...(up to ~6mil)

请注意,在第一行中,第 2 列有一个 1,因为它在原始数据集中具有该特征,第 4 行第 5 列和第 5 行第 2 列也是如此。

我已经为此创建了一个代码,但是当我尝试以下操作时它已经耗尽内存:

    File data = new File("dataSet.txt");
Scanner in = new Scanner(data);

//check how many rows
int nRows = 0;
while (in.hasNextLine()) {
in.nextLine();
nRows++;
}

//initializing the matrix
in.close();
in = new Scanner(data);
int[][] matrix = new int[nRows][nRows];

好像连这么大的数组都处理不了?获得非稀疏矩阵至关重要。有什么办法可以解决这个内存错误吗?

亲切的问候,

最佳答案

将数组分配为更小、更易于管理的部分,在处理这些部分后使这些部分持久存在,然后根据需要再次查找它们。这里的问题是你无法立即将整个事情排序并处理到内存中。您正在处理大量数据,如果您想构建 6Mx6M 矩阵,那么再多的额外堆空间也无济于事。

关于java - OutOfMemoryError : Java heap space: Trying to convert a ~5. 700万条记录数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11143538/

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