在此示例中,我在Spark中使用了SQL:
results = spark.sql("select * from ventas")
其中ventas是一个数据帧,以前的目录类似于表:
df.createOrReplaceTempView('ventas')
但是我已经看到了使用SqlContext类在Spark中使用SQL的其他方法:
df = sqlContext.sql("SELECT * FROM table")
两者之间有什么区别?
预先感谢
答案 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()