spark.sql vs SqlContext



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

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

其中 ventas 是一个数据帧,以前像表一样编目:

df.createOrReplaceTempView('ventas')

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

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

它们之间有什么区别?

提前致谢

从用户(不是贡献者(的角度来看,我只能重新讨论开发人员在升级说明中提供的内容:

从 Spark SQL 1.6 升级到 2.0

  • SparkSession现在是Spark的新入口点,它取代了旧的SQLContext和HiveContext。请注意,保留旧的 SQLContext 和 HiveContext 是为了向后兼容。可以从SparkSession访问新的目录接口 - 数据库和表访问(如listTables,createExternalTable,dropTempView,cacheTable(上的现有API被移动到此处。

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

如果你看一下源代码,你会发现SqlContext类大多被标记为@deprecated。仔细检查表明,最常用的方法只是调用sparkSession

有关更多信息,请查看开发人员说明、Jira 问题、关于 Spark 2.0 的会议讨论和 Databricks 博客。

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

**before Spark2.x**
sCont = SparkContext()
sqlCont = SQLContext(sCont)
**after Spark 2.x:** 
spark = SparkSession()

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

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

  • 接下来创建 df1 作为 javaobject

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

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

使用type(df2)type(df1)检查差异

最新更新