【问题标题】:Spark SQL performance: version 1.6 vs version 1.5Spark SQL 性能:1.6 版对比 1.5 版
【发布时间】:2016-02-16 18:11:00
【问题描述】:

我尝试比较 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.2Spark 1.6.0,带有 --driver-memory=1G。 Spark 1.6.0 上的 DAG 可以在DAG查看。

【问题讨论】:

  • 看来1.6的改组比较多,能不能把两个DAG贴一下?
  • 谢谢@SebastianPiu。您可以在 spark 1.5.2spark 1.6.0 看到 2 个带有空 DAG 的屏幕截图。在其他情况下,Spark 仍能正确显示 DAG。
  • 是的,很遗憾这是 chrome 更新时导致的错误,因此无法对 DAG 进行故障排除:(
  • @SebastianPiu 确实如此。 Firefox 可以正确显示DAG

标签: performance apache-spark apache-spark-sql


【解决方案1】:

感谢 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

其实为了恢复设置值应该是“真”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多