2016-01-06 2 views
3

Spark новичок здесь. Я попытался выполнить какое-то действие pandas на моем фрейме данных, используя Spark, и, на удивление, он медленнее, чем чистый Python (т. Е. Использует пакет pandas в Python). Вот что я сделал:Почему моя Spark работает медленнее, чем чистый Python? Сравнение производительности

1) В Спарк:

Она занимает около 30 секунд, чтобы получить результаты обратно. Но использование Python занимает около 1 секунды.

2) В Спарк:

sqlContext.sql("SELECT gender, count(*) FROM train GROUP BY gender").show() 

То же самое, занимает около 30 сек в Спарк, 1 сек в Python.

несколько возможных причин моя искра гораздо медленнее, чем чистый Python:

1) Мой набор данных составляет около 220 000 записей, 24 МБ, и это не достаточно большой набор данных, чтобы показать преимущества масштабирования Спарк.

2) Моя искра работает локально, и я должен запускать ее в чем-то вроде Amazon EC.

3) Запуск локально в порядке, но моя вычислительная способность просто не режет его. Это 8-гигабайтный RAM 2015 Macbook.

4) Spark медленный, потому что я запускаю Python. Если я использую Scala, было бы намного лучше. (Кон. Аргумент: я слышал, что многие люди используют PySpark просто отлично.)

Какой из них, скорее всего, является причиной или самым правдоподобным объяснением? Мне бы хотелось услышать от экспертов Spark. Большое спасибо!!

+0

Что-то не имеющее значения для этого вопроса: я попытался добавить «Привет всем» в начале сообщения, просто чтобы найти SO ignore он или автоматически удаляет его каждый раз. не уверен, что случилось. –

+3

Использование 'pyspark' на самом деле не будет проблемой - процесс Spark все еще написан на Scala и как вы с ним взаимодействуете, это не влияет на то, что у него есть Java-сервер. Реальная проблема заключается в том, что ваши данные/вычисления недостаточно велики или достаточно значительны, чтобы преодолеть накладные расходы на координацию и задержку, введенную с помощью Spark (24 МБ данных все еще находятся в области локальных вычислений). Spark полезен для параллельной обработки, но вам нужно иметь достаточную работу/вычисление, чтобы «съесть» накладные расходы, которые предлагает Spark. – birryree

ответ

3

Python, безусловно, будет работать лучше по сравнению с pyspark на небольших наборах данных. Вы увидите разницу, когда имеете дело с большими наборами данных.

По умолчанию при запуске искры в контексте SQL Context или Hive Context он будет использовать по умолчанию 200 разделов. Вам нужно изменить его на 10 или на какое-либо значение с помощью sqlContext.sql("set spark.sql.shuffle.partitions=10");. Это будет определенно быстрее, чем с дефолтом.

1) Мой набор данных о 220 000 записей, 24 МБ, и это не является большой достаточно набора данных, чтобы показать преимущества масштабирования Спарк.

Вы правы, вы не увидите большой разницы в более низких объемах. Искра также может быть медленнее.

2) Моя искра работает локально, и я должен запустить ее в чем-то вроде Amazon EC вместо этого.

Для вашего тома это может не сильно помочь.

3) Запуск на месте - это нормально, но моя вычислительная мощность просто не обрезает . Это 8-гигабайтный RAM 2015 Macbook.

Опять же, это не имеет значения для набора данных 20 МБ.

4) Spark медленный, потому что я запускаю Python. Если я использую Scala, то он будет намного лучше, чем . (Кон-аргумент: я слышал, что многие люди используют PySpark просто отлично.)

На самостоятельном уровне будет разница. У Python больше времени на выполнение, чем на scala, но в более крупном кластере с распределенной возможностью не обязательно

+0

В искровой точке 1.5.2 'sqlContext.sql (" set spark.sql.shuffle.partitions = 10 ")' в pyspark сбой. 'sqlContext.setConf ('spark.sql.shuffle.partitions', '10')' работает отлично. Обратите внимание, что аргумент должен быть строкой. – Pyrce

+0

«Вы правы, вы не увидите большой разницы при более низких томах» - может ли это быть (грубо) определено количественно для случая OP. Вы увидите преимущество, скажем, 0,1 ГБ, 1 ГБ, 10 ГБ, 100 ГБ, 1 ТБ? Если кто-то может указать на вопрос, на что это ответ, тогда это будет полезно. –

Смежные вопросы