[JAVA高手入] 幾億個item要點先fit到入2gb heap space?

213 回覆
5 Like 26 Dislike
2022-08-11 22:32:43
寫晒去disk度先lo
淨係keep N行係memory
如果個function要用到第N+i行
咪buffer out 其中一行 (LRU/LFU)
再load第N+1行去memory
2022-08-11 22:33:02
應該唔關事
岩岩我set左個threshold比個correlation
如果correlation唔過0.5唔會放入個hash map
一改完 行到嘅row數 立即增加
2022-08-11 22:34:27
之前幾份功課都有reading/suggested list
今次仆街TA剩係話"有幾個possible methods
你地用下創意諗"
2022-08-11 22:34:55
big data course黎
2022-08-11 22:35:20
int[50000*50000]就唔會係sparse array啦
2022-08-11 22:35:59
Multithreading 拆細黎做 得唔得
2022-08-11 22:36:17
巴打介唔介意講多啲? 或者share下啲link比我望望點做?

我唔係好熟java
2022-08-11 22:36:58
試下改變下個表達方式 唔洗理到底背後係想做d咩先,你想做既野係唔係


0 0 0 0 … 50000 個column
0 0 0 0 … 50000
.
.
50000 條row… etc
用坐標表示即係 (0,0)- (50000,50000)


(0, 0) 既數字可以係起0 可以係其他數字
(x,y) 而X,Y 就係隨機既一點,佢可以係任何數字
咁依家你想要既Input 係咩 同埋個output 係咩?

Input:

Output:
2022-08-11 22:38:13
但我又唔知實際佢有幾多個value係non-zero

定係應該咁:
1. 行曬所有data 拎個count of non-zero value
2. 先再new int[3][count of non-zero value]
2022-08-11 22:39:15
有冇calculate 個function 嘅return type? 如果冇 你calculate return String 其實都做到
定佢一定要你return Map?
2022-08-11 22:40:03
50000 * 50000 * 16 byte (double size)
成差唔多 40gb, 你點寫入 2gb heap ?
2022-08-11 22:40:07
我依加就係用緊依個方法 (如果我無理解錯你講法)

HashMap<Point, Double>();
point就係{row no., column no.}
double就放個correlation
2022-08-11 22:40:11
個結果已經計到
點會唔知幾多個value係non-zero
2022-08-11 22:41:34
依個就係份功課個問題
2022-08-11 22:42:03
其實你冇Po全條問題出嚟
好難判斷你需要啲乜
2022-08-11 22:42:08
因為我未試過行曬所個dataset
2022-08-11 22:42:14
係用 steaming ?
2022-08-11 22:43:27
咁佢又無限死我個return type
依加我用緊public Map<Point, Double> matrix
2022-08-11 22:43:49
你個point unique架嘛 你咁樣仲儲多左嘢
2022-08-11 22:43:54
sparse matrix
2022-08-11 22:44:24
2022-08-11 22:44:34
2022-08-11 22:45:06
2022-08-11 22:45:06
唔好咁複雜
point就係{row no., column no., value}
淨係non-zero先記低
2022-08-11 22:45:12
唔關java事 所有language都可以用同一個approach
你memory裝唔晒咁咪寫去disk先lo
整個matrix-like class

N = 5000 // 例子
Matrix:
- private matrix = hashmap<int, array[50000]> // row index -> row

getLRURowIdx(): // 自己implement LRU

Get(int i, int j):
   if (!matrix.contains(i))  {
         if (matrix.size() >= N) delete(matrix, getLRURowIdx())
         // load matrix[i] from disk
    }
   return matrix.get(i)[j] 
吹水台自選台熱 門最 新手機台時事台政事台World體育台娛樂台動漫台Apps台遊戲台影視台講故台健康台感情台家庭台潮流台美容台上班台財經台房屋台飲食台旅遊台學術台校園台汽車台音樂台創意台硬件台電器台攝影台玩具台寵物台軟件台活動台電訊台直播台站務台黑 洞