Я использую Spark уже пару лет, и моя новая команда использует Redshift. Я успешно связал кластеры Spark / Redhshift и могу успешно выполнять запросы Redshift через Spark и выгружать их в S3.
Если я правильно понимаю, когда я генерирую фрейм данных в искровом красном смещении, реальная тяжелая работа выполняется самим Redshift, а не Spark. Я выполнял одни и те же запросы на обеих платформах, а запрос в Spark занимает примерно вдвое больше. Поскольку сам запрос решается Redshift в обоих случаях, я считаю, что дополнительное время - это сетевой ввод-вывод от красного смещения до кластеров Spark.
Spark (pyspark) на самом деле действует как сборщик результатов запросов в форме удобного фрейма данных, который я затем могу использовать для распараллеливания методов машинного обучения с его библиотеками.
Насколько точно это изображение?
РЕДАКТИРОВАТЬ: Я провел быстрый тест: локально запустил Spark (машина 16 Гб) и выполнил запрос с красным смещением примерно для 750 миллионов записей, которые вернули небольшой фрейм данных 7x2 (по одному на каждый день недели, с распределением в нем случаев. ). На то, чтобы результат отобразился локально в моей оболочке Spark, потребовалось около 3 секунд, а для завершения запроса в автономном Redshift требуется около 1,2 секунды. Моя машина 16 Гбайт не могла так быстро обрабатывать такой объем данных, а мониторинг ЦП / сети показывает, что во время запроса активность минимальна. Если я чего-то не понимаю, похоже, что тяжелая агрегация и другая обработка выполняется на уровне Redshift, а не на уровне Spark.
SELECT ... GROUP BY x
и используются столбцы, Redshift сбрасывает всю базу данных, а все остальное будет обработано Spark. 12.12.2016