Spark SQL 性能差异在 spark-sql 与 spark-shell repl 中



Spark newb 问题:我在spark-sqlspark-shell中进行了完全相同的 Spark SQL 查询。 spark-shell版本大约需要 10 秒,而spark-sql版本大约需要 20 秒。

spark-sql REPL 直接获取查询:

spark-sql> SELECT .... FROM .... LIMIT 20

火花壳 REPL 命令如下所示:

scala> val df = sqlContext.sql("SELECT ... FROM ... LIMIT 20 ") 
scala> df.show()

在这两种情况下,它是完全相同的查询。 此外,由于显式LIMIT 20,查询仅返回几行。

从不同的 CLI 执行同一查询的方式有何不同?

我正在Hortonworks沙盒VM(Linux CentOS)上运行,如果有帮助的话。

我认为它更多的是关于两部分,

  1. 首先,它可能与顺序相关。如果你运行spark-sql,第一个spark将能够从头开始构建解释计划。但是,如果您再次运行相同的查询。它可能需要比第一个更少的时间,无论是从shell还是sql,因为解释计划很容易被检索

  2. 其次,它可能与 spark-sql 转换为对资源进行排序有关。它发生了多次。Spark-shell获取资源并比spark-sql更快地启动该过程。你可以从UI或top检查这一点,你会发现spark-shell的实际启动比spark-sql快。

最新更新