【问题标题】:Differences between query with SQL and without SQL in SparkSQLSparkSQL 中带 SQL 和不带 SQL 的查询之间的区别
【发布时间】:2020-06-24 10:26:11
【问题描述】:

在学习Scala中的Spark 2的过程中,我发现我们可以使用两种方式在SparkSQL中查询数据:

  1. spark.sql(SQL_STATEMENT) // 变量“spark”是 SparkSession 的一个实例
  2. DataSet/DataFrame.select/.where/.groupBy....

我的问题是它们之间的差异(功能、性能等)是什么? 我试图在互联网或他们的文档上找到anwser,但失败了,所以我想听听你的意见

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    我认为带有SQL 查询和不带SQL 查询的查询是等价且相等的。两者都在内部,并在内部使用相同的引擎。但我更喜欢没有SQL 查询的用户,这些查询更容易编写并提供某种程度的类型安全。

    其中

      1.  spark.sql(SQL_STATEMENT) // variable "spark" is a SparkSession
      2.  DataSet/DataFrame.select/.where/.groupBy....
    

    在大多数情况下我会选择数字 2,因为它提供了一些类型安全

    【讨论】:

    • 这不是真的,例如你不能在DataFrame API 中使用子查询。
    • 是的,没错,我们不能在 DataFrame Api 中使用子查询,忘了提一下。谢谢你
    • @ShankarKoirala 首先感谢您的意见,但我想知道您的意见参考了什么?为什么你知道他们在内部使用相同的引擎?
    • @ShankarKoirala 谢谢,哈哈,不过好像是死循环
    【解决方案2】:

    通过使用 DataFrames(一种 Java API),您可以通过将 SQL 语句分解为简单语句来调试它们。这将有助于更好地理解。

    唯一不同的是使用什么样的底层算法进行分组。 HashAggregation 与 SortAggregation HashAggregation 会比 SortAggregation 更有效。 SortAggregation - 将对行进行排序,然后将匹配的行聚集在一起。 O(n*log n) HashAggregation 使用键作为分组列创建 HashMap,其余列作为 Map 中的值。 Spark SQL 尽可能使用 HashAggregation(如果值的数据是可变的)。 O(n)

    【讨论】:

      猜你喜欢
      • 2011-06-11
      • 1970-01-01
      • 2015-08-17
      • 2020-07-31
      • 2016-04-25
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多