我正在尝试从并行集合转换回常规地图。根据 api,如果我在任何适当定义的并行集合上调用 toMap,它应该返回一个标准 Map,但它会通过可迭代的扁平集合返回 ParMap。
I have a
val task: Stream[Future[Iterable[Tuple2[String, String]]]]
从中我得到:
val res: ParSeq[Iterable[Tuple2[String, String]]] = tasks.par.map(f => f.apply())
Finally:
val finalresult = res.flatten.toMap
不幸的是,类型finalresult
is ParMap[String, String]
.
另一方面,如果我这样称呼它:
tasks.par.map(f => f.apply()).reduce(_++_).toMap
那么返回类型是Map[String, String]
.
有人能告诉我这是为什么吗?以及(出于好奇)我如何强制转换ParMap
to a Map
scala什么时候不让我这么做?
当您通过以下方式明确从顺序收集转变为并行收集时.par
,你回到顺序通过.seq
。由于集合和映射具有并行实现,toMap
and toSet
调用将集合留在当前域中。
的例子reduce
之所以有效,是因为它减少了集合(外部ParSeq
消失了,留给你内在的(连续的)Iterable[Tuple2[...]]
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)