apache-spark - spark-sql 与 spark-shell REPL 中的 Spark SQL 性能差异

标签 apache-spark

Spark newb 问题:我在 spark-sql 中进行完全相同的 Spark SQL 查询并在 spark-shell . 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-sql,spark 就能从头开始构建解释计划。但是,如果您再次运行相同的查询。从 shell 或 sql 中花费的时间可能少于第一个,因为解释计划很容易检索
  • 其次,它可能与 spark-sql 转换为资源排序有关。它发生了多次。 Spark-shell 比 spark-sql 更快地获取资源并启动进程。您可以从 UI 或从 top 进行检查。您会发现 spark-shell 的实际启动速度比 spark-sql 快。
  • 关于apache-spark - spark-sql 与 spark-shell REPL 中的 Spark SQL 性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35342390/

    相关文章:

    apache-spark - 如何减少 BigQuery 中的临时表过期时间

    python - pyspark 导入错误 : cannot import name accumulators

    hadoop - 如何通过 Spark 流和 Apache Flume 将 Kafka 主题加载到 HDFS

    scala - 在 Spark 中将 sqlContext 作为隐式参数传递

    apache-spark - 如何使用Window()计算PySpark中的滚动中位数?

    java - 在这种情况下 Spark 内部是如何工作的?

    apache-spark - createCombiner,mergeValue,mergeCombiner如何在Spark的CombineByKey中工作(使用Scala)

    java - Spark-提交错误行 71 :/Library/Java/JavaVirtualMachines/jdk1. 8.0_192.jdk/Contents/Home/bin/java: Mac 中没有这样的文件或目录

    apache-spark - PySpark::FP-growth 算法(引发 ValueError ("Params must be either a param map or a list/tuple of param maps, ")

    java - 如何在spark shell中注册Java Spark UDF?