scala并行化集合
来源:互联网 发布:前端数据可视化 编辑:程序博客网 时间:2024/06/08 14:25
scala底层已经实现并行化集合 (但瓶颈会限制在单机上====> 所以 分布式 spark)
reduce求和是采用reduceLeft (从左叠加)
缺点: 速度回随着元素的增加而增加!!!
且叠加时为单线程
优化:使用并行化集合 scala.collection.parallel
parallel
scala> val lst0 = List(1,2,8,5,6,3,0,7,9)lst0: List[Int] = List(1, 2, 8, 5, 6, 3, 0, 7, 9)scala> lst0.reduce(_+_)res17: Int = 41scala> lst0.parres18: scala.collection.parallel.immutable.ParSeq[Int] = ParVector(1, 2, 8, 5, 6, 3, 0, 7, 9)scala> lst0.par.reduce(_+_)res19: Int = 41
par 调用的不再是reduceLeft 而是 放在线程池里 多个线程去计算
并行化集合 每个初始值100都会在每个线程内初始一次
多核 每次分配的线程都不一样 所以结果每次不一定相等
scala> lst0.par.reduce(_+_)res19: Int = 41scala> lst0.par.fold(0)(_+_)res20: Int = 41scala> lst0.par.fold(100)(_+_)res21: Int = 741scala> lst0.par.fold(100)(_+_)res22: Int = 441scala> lst0.par.fold(100)(_+_)res23: Int = 841scala> lst0.par.fold(100)(_+_)res24: Int = 841scala> lst0.par.fold(100)(_+_)res25: Int = 841
scala> val arr = List(List(1,2,3), List(3,4,5), List(2), List(0))scala> arr.aggregate(100)(_+_.sum,_+_)res27: Int = 120scala> arr.aggregate(100)(_+_.sum,_+_)res28: Int = 120scala> arr.aggregate(100)(_+_.sum,_+_)res29: Int = 120//最大只会是420scala> arr.par.aggregate(100)(_+_.sum,_+_)res30: Int = 420//最大只会是420scala> arr.par.aggregate(100)(_+_.sum,_+_)res31: Int = 420scala> arr.par.aggregate(100)(_+_.sum,_+_)res45: Int = 420scala> arr.par.aggregate(100)(_+_.sum,_+_)res46: Int = 320scala> arr.par.aggregate(100)(_+_.sum,_+_)res47: Int = 420scala> arr.par.aggregate(100)(_+_.sum,_+_)
阅读全文
0 0
- scala并行化集合
- scala并行集合
- scala学习笔记:理解并行集合par
- scala 并行集合在spark中的应用
- 控制scala并行集合的并发数量
- Scala并行
- 并行集合
- spark,scala并行求和
- Scala-Actor并行wordcount
- OpenMP并行化实例----Mandelbrot集合并行化计算
- scala使用par并行集合设置的线程池未关闭导致的内存占用问题
- Scala集合
- Scala集合
- Scala 集合
- Scala集合
- scala集合
- Scala集合
- scala 集合
- JDBC工作流程、JNDI连接池
- 【详细版】Nginx的安装与配置
- scanf函数的误区
- 2016ACM/ICPC亚洲区大连站【solved:10 / 11】
- 安装Linux
- scala并行化集合
- ArrayList自定义排序
- 欢迎使用CSDN-markdown编辑器
- 排查tomcat服务性能瓶颈
- UVA10601 & Caioj1241【Polya计数法】Cubes
- 300.30 response实现文件下载
- 18、Date对象、常用方法、对象、标签、事件
- codeforces 555C
- 自定义抛出异常