2017-06-21 43 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。因为存在将其存储到存储器中的开销,所以其效率较低。

无论您选择何种解决方案,您都应该在添加时使用适当的类型,而不是在计算结束时使用。