【问题标题】:What role Spark SQL acts? Memory DB?Spark SQL 扮演什么角色?内存数据库?
【发布时间】:2018-01-16 15:33:05
【问题描述】:

最近我来到 Spark SQL。 我阅读了数据源 API,但仍然对 Spark SQL 所扮演的角色感到困惑。

当我对我需要的任何东西执行 SQL 时,会先加载所有数据并在内存中执行 sql 吗?这意味着 spark sql 只是一个适用于已加载数据的内存数据库。还是每次都在本地扫描?

真的很愿意回答。

最好的问候。

【问题讨论】:

    标签: apache-spark apache-spark-sql


    【解决方案1】:

    我阅读了数据源 API,但仍然对 Spark SQL 所扮演的角色感到困惑。

    Spark SQL 不是数据库。它只是一个接口,允许您对存储在 Spark 特定的基于行的结构中的数据执行类似 SQL 的查询,称为 DataFrame

    要通过 Spark 运行 SQL 查询,第一个要求是您尝试在其上运行查询的表应该存在于 Hive 元存储中(即该表应该存在于 Hive 中)或者它应该是属于当前SQLContext/HiveContext 一部分的临时视图。

    因此,如果您有一个数据框 df 并且您想对其运行 SQL 查询,您可以使用:

    df.createOrReplaceTempView("temp_table")     // or registerTempTable
    

    然后您可以使用SQLContext/HiveContextSparkSession 对其运行查询。

    spark.sql("SELECT * FROM temp_table")
    

    Here's eliasah's answer that explains how createOrReplaceTempView works internally

    当我对我需要的任何东西执行 SQL 时,是否会先加载所有数据并在内存中执行 sql?

    数据将存储在内存中或磁盘上,具体取决于您使用的持久性策略。如果您选择cache 表,则数据将存储在内存中,与从磁盘获取数据的情况相比,操作会相当快。该部分无论如何都是可配置的,并且取决于用户。您基本上可以告诉 Spark 您希望它如何存储数据。

    【讨论】:

      【解决方案2】:

      Spark-sql 只会缓存操作拉取的行,这意味着它将缓存操作期间必须读取的分区。这使您的第一次通话比您的第二次通话快得多

      【讨论】:

        猜你喜欢
        • 2020-01-25
        • 1970-01-01
        • 2020-12-24
        • 2015-09-26
        • 2017-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多