Spark SQL性能:版本1.6与版本1.5的比较

8
我尝试比较了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" )

以下是您要翻译的内容:

这里有两张截图,Spark 1.5.2Spark 1.6.0,都使用了 --driver-memory=1G 参数。在 Spark 1.6.0 上,可以查看 DAG 的信息,链接为 DAG


1
似乎在1.6中洗牌更多,你能发布这两个DAG吗? - Sebastian Piu
感谢@SebastianPiu。您可以在spark 1.5.2spark 1.6.0中看到两个空DAG的截图。在其他情况下,Spark仍然可以正确显示DAG。 - Tien-Dung Le
是的,不幸的是这是一个由Chrome更新引起的错误,因此无法对DAG进行故障排除 :( - Sebastian Piu
@SebastianPiu 哦,确实。Firefox可以正确显示DAG - Tien-Dung Le
1个回答

1
感谢Herman van Hövell在spark dev社区的回复。为了与其他成员分享,我在这里分享他的回复。
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”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接