spark.sql 与 SqlContext

spark.sql vs SqlContext

我在Spark中使用过SQL,在这个例子中:

results = spark.sql("select * from ventas")

其中 ventas 是一个数据框,之前的分类类似于 table:

df.createOrReplaceTempView('ventas')

但我已经看到在 Spark 中使用 SQL 的其他方法,使用 class SqlContext:

df = sqlContext.sql("SELECT * FROM table")

两者有什么区别?

提前致谢

从用户(而非贡献者)的角度来看,我只能重复开发人员在升级说明中提供的内容:

Upgrading From Spark SQL 1.6 to 2.0

  • SparkSession is now the new entry point of Spark that replaces the old SQLContext and HiveContext. Note that the old SQLContext and HiveContext are kept for backward compatibility. A new catalog interface is accessible from SparkSession - existing API on databases and tables access such as listTables, createExternalTable, dropTempView, cacheTable are moved here.

在 2.0 之前,SqlContext 需要额外调用创建它的工厂。使用 SparkSession,他们让事情变得更加方便。

如果您查看源代码,您会注意到 SqlContext class 大部分标记为 @deprecated。仔细检查表明,最常用的方法只是调用 sparkSession.

有关详细信息,请查看开发人员说明、Jira 问题、关于 spark 2.0 的会议演讲和 Databricks 博客。

Sparksession 是现在使用 Spark 对象的首选方式。 Hivecontext 和 SQLContext 都可以作为这个单一对象 SparkSession 的一部分使用。

您正在通过创建视图使用最新的语法 df.createOrReplaceTempView('ventas')。

  • 接下来将 df1 创建为 javaobject

    df1=sqlcontext.sql("select col1,col2,col3 from table")
    
  • 接下来创建 df2 作为 DATAFRAME

    df2=spark.sql("select col1,col2,col3 from table")
    

使用 type(df2)type(df1)

检查差异

在 Spark 2.x 之前,SQLContext 是在 SparkContext 的帮助下构建的,但在 Spark 2.x 引入了具有 HiveContext 和 SQLContect 功能的 SparkSession 之后 both.So 无需单独创建 SQLContext。

   **before Spark2.x**
   sCont = SparkContext()
   sqlCont = SQLContext(sCont)

   **after Spark 2.x:** 
   spark = SparkSession()