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?