Spark SQL性能:版本1.6 vs 1.5版

Tie*_* Le 8 performance apache-spark apache-spark-sql

我试图比较Spark SQL版本1.6和版本1.5的性能.在一个简单的例子中,Spark 1.6比Spark 1.5快得多.但是,在一个更复杂的查询中 - 在我的例子中是一个带有分组集的聚合查询,Spark SQL 1.6版比Spark SQL 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" )
Run Code Online (Sandbox Code Playgroud)

这里有2个截图Spark 1.5.2Spark 1.6.0 with --driver-memory = 1G.可以在DAG查看Spark 1.6.0上的DAG.

Tie*_* Le 1

感谢 Herman van H\xc3\xb6vell 在 Spark 开发社区上的回复。为了与其他成员分享,我在这里分享他的回应。

\n\n
\n

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

\n
\n\n

实际上为了恢复设置值应该是“true”。

\n