spark.sql和SqlContext

时间:2018-08-12 22:13:20

标签: apache-spark pyspark apache-spark-sql pyspark-sql

在此示例中,我在Spark中使用了SQL:

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

其中ventas是一个数据帧,以前的目录类似于表:

df.createOrReplaceTempView('ventas')

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

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

两者之间有什么区别?

预先感谢

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

  

从Spark SQL 1.6升级到2.0

     
      
  • SparkSession现在是Spark的新入口点,它取代了旧的SQLContext和HiveContext。请注意,保留旧的SQLContext和HiveContext是为了向后兼容。可通过SparkSession访问新的目录界面-数据库和表访问的现有API(例如listTables,createExternalTable,dropTempView,cacheTable)已移至此处。
  •   

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

如果查看源代码,您会注意到SqlContext类主要标记为@deprecated。仔细检查发现,最常用的方法只是调用sparkSession

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

答案 2 :(得分:0)

  • 接下来将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)

检查差异

答案 3 :(得分:0)

在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()