这可能是折叠还是聚合?从文档中不清楚哪些方法可以并行化但保持顺序。
答案 0 :(得分:4)
是的,对于并行集合上的fold / aggregate / reduce操作,可以保留订单。这没有很好的记录。诀窍是你要折叠的操作必须是关联的(因此能够被任意分割和重新组合),但不需要是可交换的(因此不能安全地重新排序)。字符串连接是关联,非交换操作的完美示例,因此折叠可以并行完成。
val concat = myParallelList.map(_.toString).reduce(_+_)
答案 1 :(得分:1)
对于折叠:foldRight
和foldLeft
无法并行处理,您需要使用新的fold
方法(更多信息there)。
与fold
类似,aggregate
可以并行执行:它“按顺序遍历不同分区中的元素”(Scaladoc),尽管看起来你对分区的方式没有直接影响选择的。
答案 2 :(得分:0)
我认为,根据Odersky的出版物(http://infoscience.epfl.ch/),对Jean-Philippe Pellets的评论意义上保留'顺序'的答案是有保证的。记录/ 150220 / files / pc.pdf)IFF分割您的集合的部分在订单方面表现良好。
即。如果你有元素a< b< c和a和c在一个分区中结束,因此b也在同一个分区中。
我不记得究竟是什么部分负责拆分,但是如果你找到它,你可能会在其文档或源代码中提供足够的信息来回答你的问题。