2016-02-03 2 views
7

Я попытался сравнить производительность Spark SQL версии 1.6 и версии 1.5. В простом случае Spark 1.6 работает быстрее Spark 1.5. Однако в более сложном запросе - в моем случае агрегирующий запрос с наборами групп Spark SQL версии 1.6 намного медленнее, чем Spark SQL версии 1.5. Кто-нибудь замечает ту же проблему? и даже лучше иметь решение для такого рода запросов?Производительность Spark SQL: версия 1.6 vs версия 1.5

Вот мой код

case class Toto(
       a: String = f"${(math.random*1e6).toLong}%06.0f", 
       b: String = f"${(math.random*1e6).toLong}%06.0f", 
       c: String = f"${(math.random*1e6).toLong}%06.0f", 
       n: Int = (math.random*1e3).toInt, 
       m: Double = (math.random*1e3)) 

val data = sc.parallelize(1 to 1e6.toInt).map(i => Toto()) 
val df: org.apache.spark.sql.DataFrame = sqlContext.createDataFrame(data) 

df.registerTempTable("toto") 
val sqlSelect = "SELECT a, b, COUNT(1) AS k1, COUNT(DISTINCT n) AS k2, SUM(m) AS k3" 
val sqlGroupBy = "FROM toto GROUP BY a, b GROUPING SETS ((a,b),(a),(b))" 
val sqlText = s"$sqlSelect $sqlGroupBy" 

val rs1 = sqlContext.sql(sqlText) 
rs1.saveAsParquetFile("rs1") 

Вот 2 скриншота Spark 1.5.2 и Spark 1.6.0 с --driver-памяти = 1G. DAG на Spark 1.6.0 можно посмотреть по адресу DAG.

+1

Кажется, что он перетасовывает больше в 1.6, можете ли вы отправить две группы DAG? –

+0

Спасибо @SebastianPiu. Вы можете увидеть 2 скриншота с пустыми DAG в [spark 1.5.2] (http://i.stack.imgur.com/dLXiK.png) и [искра 1.6.0] (http: //i.stack.imgur .com/4oomU.png). В других случаях Spark все еще отображает DAG. –

+0

Да, к сожалению, это ошибка, вызванная тем, что хром обновился, поэтому невозможно устранить ошибки в DAG :( –

ответ

1

Спасибо Герман ван Хёвелл за его ответ на сообщество разработчиков искры. Чтобы поделиться с другими членами, я разделяю его ответ здесь.

1.6 планы отдельных отдельных агрегатов, таких как несколько отдельных агрегатов; это по своей сути вызывает некоторые накладные расходы, но является более стабильным в случае высокой мощности. Вы можете вернуться к старому поведению, установив для параметра spark.sql.specializeSingleDistinctAggPlanning значение false. См. Также: https://github.com/apache/spark/blob/branch-1.6/sql/core/src/main/scala/org/apache/spark/sql/SQLConf.scala#L452-L462

На самом деле для возврата значения настройки должно быть «true».

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