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?