【发布时间】:2016-02-11 14:43:38
【问题描述】:
Spark 新手问题:我在 spark-sql 和 spark-shell 中进行完全相同的 Spark SQL 查询。 spark-shell 版本大约需要 10 秒,而spark-sql 版本大约需要 20 秒。
spark-sql REPL 直接获取查询:
spark-sql> SELECT .... FROM .... LIMIT 20
spark-shell REPL 命令如下:
scala> val df = sqlContext.sql("SELECT ... FROM ... LIMIT 20 ")
scala> df.show()
在这两种情况下,它是完全相同的查询。此外,由于显式LIMIT 20,查询仅返回几行。
从不同 CLI 执行相同查询的方式有何不同?
如果有帮助,我正在 Hortonworks 沙盒 VM (Linux CentOS) 上运行。
【问题讨论】:
-
对于 spark-shell 版本,df.show() 调用是 10 秒还是 sqlContext.sql 调用和 df.show 调用都是 10 秒? DataFrame 初始化不是免费的(取决于数据源),因此即使在调用诸如收集/显示之类的操作之前,您也可以花费大量时间进行初始化。 spark-sql 调用可能会像 spark-shell 调用一样执行这两个步骤,因此将苹果与苹果进行比较很重要。
-
DataFrame 的初始化几乎是瞬间完成的——时间都在
df.show。 -
spark 可能正在推迟初始化。 (在 show 执行查询时访问之前不会加载表)
标签: apache-spark