2017-06-21 41 views
0

我計算所有事件的總字節大小:斯卡拉:減少{_ + _}返回負值,因爲值過高

val totalSize = sparkContext.map{ case (_, record) => getEventFromRecord(record).toByteArray.size}.reduce{_+_} 

並將其寫入這樣一個文件:

val outputWriter = new PrintWriter(fs.create(path)) 
outputWriter.println("Total size: "+ totalSize) 

但由於尺寸太大,我得到的是負值。我需要將其轉換爲Long。我想下面的變化,但不知道這是否是正確的:

val totalSize = sparkContext.map{ case (_, record) => getEventFromRecord(record).toByteArray.size.toLong}.reduce{_+_}.toLong 
+4

看起來很對我(除了最後一個'.toLong',你不需要那個)......什麼讓你不確定? – Dima

+0

我同意@Dima –

回答

0

您應該使用Long從一開始或包入BigInt。因爲存在將其存儲到存儲器中的開銷,所以其效率較低。

無論您選擇何種解決方案,您都應該在添加時使用適當的類型,而不是在計算結束時使用。