【问题标题】:Conversion from scala parallel collection to regular collection从 scala 并行收集到常规收集的转换
【发布时间】:2012-08-14 22:05:37
【问题描述】:

我正在尝试从并行集合转换回常规地图。根据 api,如果我在任何适当定义的并行集合上调用 toMap,它应该返回一个标准 Map,但它在一个扁平化的迭代集合上返回 ParMap。

我有一个

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

【问题讨论】:

    标签: scala parallel-processing scala-collections


    【解决方案1】:

    当您通过.par 从顺序收集显式转到并行收集时,您将通过.seq 回到顺序收集。由于集合和映射具有并行实现,toMaptoSet 调用将集合留在当前域中。

    reduce 的示例之所以有效,是因为它减少了集合(外部的 ParSeq 消失了,只剩下内部的(顺序的)Iterable[Tuple2[...]])。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      • 1970-01-01
      • 2021-09-17
      • 2015-02-08
      相关资源
      最近更新 更多