Scala:reduce{_+_} 返回负值,因为值太高



我正在计算所有事件的总大小(以字节为单位(:

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

并将其写入如下文件:

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

但是由于大小太大,我得到负值。我需要将其转换为长。我尝试了以下更改,但不确定是否正确:

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

你应该从一开始就使用Long或打包到BigInt 中。 BigInt效率较低,因为将其存储到内存中会产生开销。

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

相关内容

最新更新