Spark SQL的作用是什么?记忆DB?

时间:2018-01-16 02:26:54

标签: apache-spark apache-spark-sql

最近我来到Spark SQL。 我阅读了数据源Api,但仍然对Spark SQL的作用感到困惑。

当我根据需要执行SQL时,会首先加载所有数据并在内存中执行sql吗?这意味着spark sql只是一个处理已加载数据的内存数据库。或者每次都在本地扫描?

非常愿意回答任何问题。

最诚挚的问候。

2 个答案:

答案 0 :(得分:0)

  

我阅读了数据源Api,但仍然对Spark SQL的作用感到困惑。

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

要通过Spark运行SQL查询,第一个要求是您尝试运行查询的表应该存在于Hive Metastore中(即该表应该存在于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您希望它如何存储数据。

答案 1 :(得分:0)

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