这是我昨天与我的学习小组分享的一些代码:https ://gist.github.com/natemurthy/019e49e6f5f0d1be8719 。编译后,我使用以下堆参数运行 map.scala:
$ scala -J"-Xmx4G" map
并获得以下 4 次单独测试的结果:
// (1L to 20000000L).map(_*2)
(Map) multiplying 20 million elements by 2
(Reduce) sum: 400000020000000
Total MapReduce time: 7.562381
// (1L to 20000000L).toArray.map(_*2)
(Map) multiplying 20 million elements by 2
(Reduce) sum: 400000020000000
Total MapReduce time: 1.233997
// (1L to 20000000L).toVector.map(_*2)
(Map) multiplying 20 million elements by 2
(Reduce) sum: 400000020000000
Total MapReduce time: 15.041896
// (1L to 20000000L).par.map(_*2)
(Map) multiplying 20 million elements by 2
(Reduce) sum: 400000020000000
Total MapReduce time: 18.586220
我试图弄清楚为什么这些结果在不同的集合类型中会有所不同,更重要的是,为什么对于应该直观地更快评估的集合来说性能似乎更差。很想听听您对这些结果的见解。我还尝试在Breeze和 Saddle 上执行这些操作(在相同的测试中表现更好),但我想看看我可以将内置的 Scala Collections API 推到多远。
这些测试在华硕 Zenbook UX31A、英特尔酷睿 i7 3517U 1.9 GHz 双核超线程、4 GB RAM 和 Ubuntu 12.04 桌面上运行。将 Scala 2.11.1 与 JDK 1.7 一起使用