我正在计算所有事件的总大小(以字节为单位(:
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
效率较低,因为将其存储到内存中会产生开销。
无论您选择哪种解决方案,都应该在添加时而不是在计算结束时使用正确的类型。