1
我有一個稀疏的二維數據,每個含有高達約20功能約6萬條記錄設置。 我想這個轉換成非稀疏2D數據只有零的和來設定的,但我不斷收到的OutOfMemoryError。的OutOfMemoryError:Java堆空間:嘗試轉換〜5.7million記錄數據集
這裏是我的數據集的例子:
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)
公告稱,第一行上,有一個1在第2列,因爲它在原始數據集中具有該特徵,在第5行的第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];
看來它甚至不能處理那麼大的一個數組?我得到一個非稀疏矩陣是至關重要的。有沒有解決這個內存錯誤的辦法?
親切的問候,
6mil X 6mil == 36萬億。即使這只是一些數據,這仍然是4.5TB的數據。你根本沒有得到一個地址空間接近大型的任何地方,所以你將需要找出一種方法來「流」,通過內存中的數據。另外,我想我有點困惑,爲什麼你絕對需要非稀疏矩陣。您執行的任何計算都可以抽象出來,這樣就不需要設置物理位。我認爲這是不適合印刷,無論是:) – dlev
也許儘量不要保存所有的數據在緩存中查找到外部的方式來堅持它 –
不知道你正在嘗試做的,但它看起來像行未分類。也許只需要對它們進行排序以獲得更好的性能即可?會給你日誌(n)訪問任何二進制搜索功能......如果n被限制爲20,那應該不會太差? –