Параллельные коллекции предоставляются на языке Scala как простой способ распараллеливания обработки данных в Scala. Основная идея заключается в том, что когда вы выполняете такие операции, как map
, filter
и т. Д. ... с коллекцией, можно распараллелить ее, используя пул потоков. Этот тип распараллеливания называется распараллеливанием данных, поскольку он основан на самих данных. Это происходит локально в JVM, и Scala будет использовать столько потоков, сколько ядер доступно для JVM.
С другой стороны, Spark основан на RDD, который представляет собой абстракцию, представляющую распределенный набор данных. В отличие от параллельных коллекций Scala, эти наборы данных распределены по нескольким узлам. Spark также основан на параллелизме данных, но на этот раз распределяется параллелизм данных. Это позволяет вам распараллеливать намного больше, чем в одной JVM, но также создает другие проблемы, связанные с перестановкой данных.
Таким образом, Spark реализует систему параллелизма распределенных данных, поэтому каждый раз, когда вы выполняете map
, filter
и т. Д. ... вы делаете что-то похожее на то, что будет делать параллельная коллекция Scala, но распределенным способом. Также единицей параллелизма в Spark являются разделы, а в коллекциях Scala - каждая строка.
Вы всегда можете использовать параллельные коллекции Scala внутри задачи Spark для распараллеливания в задаче Spark, но вы не обязательно увидите улучшение производительности, особенно если ваши данные уже равномерно распределены в вашем RDD, и каждая задача требует примерно одинакового вычислительного объема. ресурсы для выполнения.