在SQL中使用SQL查询和在SQL中没有SQL的区别

时间:2017-06-12 12:17:39

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

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

  
      
  1. spark。 sql (SQL_STATEMENT)//变量“spark”是SparkSession的一个实例
  2.   
  3. 数据集/数据帧。选择/。凡/ .groupBy ....
  4.   

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

2 个答案:

答案 0 :(得分:1)

我认为SQL查询和没有SQL查询的查询都是等价的。两者都在内部并且在内部使用相同的引擎。但我更倾向于使用没有SQL查询的用户,这些查询更容易编写并提供某种级别的类型安全性。

其中

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

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

答案 1 :(得分:1)

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

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