Параллельные операции с картами?
Предоставляет ли Scala способ выполнения операций параллельной карты как части стандартного языка?
Например, учитывая:
scala> val a = List((1,2), (3,4), (3,6))
a: List[(Int, Int)] = List((1,2), (3,4), (3,6))
Я могу сделать:
scala> a.map(tup => tup._1 + tup._2)
res0: List[Int] = List(3, 7, 9)
Однако, насколько мне известно, это последовательно сопоставляет предоставленную функцию со списком объектов. Существует ли встроенный способ применения функции к каждому элементу в отдельном потоке (или эквивалентном), а затем результаты собираются в результирующий список?
2 ответа
Если вы добавите par
тогда вы получите параллельный сбор, а операции над ним будут обрабатываться параллельно. Чтобы преобразовать обратно в обычную коллекцию, вызовите toList
,
Итак, ваш код будет выглядеть так:
a.par.map(tup => tup._1 + tup._2).toList
Или .seq
получить последовательную коллекцию (противоположность параллельной коллекции).
a.par.map(tup => tup._1 + tup._2).seq
par
разделяет ваш список для обработки по нескольким потокам. Затем вы можете регулировать процесс создания потоков, модифицируя tasksupport
член результирующего ParSeq
,