【问题标题】:spark.sql vs SqlContextspark.sql 与 SqlContext
【发布时间】:2019-01-19 15:35:05
【问题描述】:

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

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

其中 ventas 是一个数据框,以前像表格一样进行编目:

df.createOrReplaceTempView('ventas')

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

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

两者有什么区别?

提前致谢

【问题讨论】:

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


    【解决方案1】:

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

    从 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】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:
          • 接下来将 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) 检查差异

          【讨论】:

            猜你喜欢
            • 2016-11-24
            • 2021-06-07
            • 1970-01-01
            • 2020-01-03
            • 2019-11-27
            • 2021-08-15
            • 2018-12-19
            • 1970-01-01
            • 2018-07-02
            相关资源
            最近更新 更多