从scala并行集合到常规集合的转换
我正在尝试从平行集合转换回常规贴图。根据api,如果我在任何适当定义的并行集合上调用toMap,它应该返回一个标准映射,但它返回的是一个平坦的iterables集合上的ParMap 我有一个从scala并行集合到常规集合的转换,scala,parallel-processing,scala-collections,Scala,Parallel Processing,Scala Collections,我正在尝试从平行集合转换回常规贴图。根据api,如果我在任何适当定义的并行集合上调用toMap,它应该返回一个标准映射,但它返回的是一个平坦的iterables集合上的ParMap 我有一个 val task: Stream[Future[Iterable[Tuple2[String, String]]]] 我从中得到: val res: ParSeq[Iterable[Tuple2[String, String]]] = tasks.par.map(f => f.apply()) 最
val task: Stream[Future[Iterable[Tuple2[String, String]]]]
我从中得到:
val res: ParSeq[Iterable[Tuple2[String, String]]] = tasks.par.map(f => f.apply())
最后:
val finalresult = res.flatten.toMap
不幸的是,finalresult
的类型是ParMap[String,String]
另一方面,如果我这样称呼它:
tasks.par.map(f => f.apply()).reduce(_++_).toMap
然后返回类型是Map[String,String]
有人能告诉我这是为什么吗?(出于好奇)当scala不让我使用时,我如何强制将
ParMap
转换为Map
?当您通过.par
明确地从顺序收集转换为并行收集时,您可以通过返回顺序收集。由于集合和映射具有并行实现,toMap
和toSet
调用将集合留在当前域中
reduce
的示例之所以有效,是因为它减少了集合(外部的ParSeq
消失,留下内部的(顺序的)Iterable[Tuple2[…]
)