scala parallel-processing scala-collections

Conversión de la colección paralela scala a la colección regular



parallel-processing scala-collections (1)

A medida que avanza explícitamente de la recopilación secuencial a la paralela a través de .par , regresa a la secuencial a través de .seq . Dado que los conjuntos y mapas tienen implementaciones paralelas, toMap y toSet dejan la colección en el dominio actual.

El ejemplo de reduce funciona porque, bueno, reduce la colección (el ParSeq externo desaparece, dejándole con el Iterable[Tuple2[...]] interno) (secuencial).

Estoy tratando de volver a convertir de una colección paralela a un mapa regular. De acuerdo con la API, si llamo a Map en una colección paralela adecuadamente definida, se supone que devuelve un Mapa estándar, pero devuelve ParMap sobre una colección aplanada de iterables.

tengo un

val task: Stream[Future[Iterable[Tuple2[String, String]]]]

Y de donde salgo:

val res: ParSeq[Iterable[Tuple2[String, String]]] = tasks.par.map(f => f.apply())

Finalmente:

val finalresult = res.flatten.toMap

Desafortunadamente, el tipo de resultado finalresult es ParMap[String, String] .

Por otro lado, si lo llamo así:

tasks.par.map(f => f.apply()).reduce(_++_).toMap

entonces el tipo de retorno es Map[String, String] .

¿Puede alguien decirme por qué esto es? Y (por curiosidad), ¿cómo puedo forzar la conversión de un ParMap a un Map cuando Scala no me lo permite?