Spark SQL 性能:版本 1.6 与版本 1.5



我试图比较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" )
这里有 2 张

屏幕截图 Spark 1.5.2 和 Spark 1.6.0,其中 --driver-memory = 1G。Spark 1.6.0 上的 DAG 可以在 DAG 上查看。

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

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"。

相关内容

  • 没有找到相关文章

最新更新