createOrReplaceTempView如何在Spark中运行?

时间:2017-05-16 21:26:06

标签: apache-spark apache-spark-sql spark-dataframe

我是Spark和Spark SQL的新手。

createOrReplaceTempView如何在Spark中运行?

如果我们将一个RDD个对象注册为一个表,那么火花会将所有数据保存在内存中吗?

3 个答案:

答案 0 :(得分:37)

createOrReplaceTempView创建(或替换,如果该视图名称已存在)一个懒惰评估的“视图”,然后您可以像Spark SQL中的hive表一样使用它。除非您缓存支撑视图的数据集,否则会持久存储到内存中。

scala> val s = Seq(1,2,3).toDF("num")
s: org.apache.spark.sql.DataFrame = [num: int]

scala> s.createOrReplaceTempView("nums")

scala> spark.table("nums")
res22: org.apache.spark.sql.DataFrame = [num: int]

scala> spark.table("nums").cache
res23: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [num: int]

scala> spark.table("nums").count
res24: Long = 3

仅在.count调用后才会完全缓存数据。这是证明它已被缓存:

Cached nums temp view/table

相关SO:spark createOrReplaceTempView vs createGlobalTempView

相关引用(与持久表相比):“与createOrReplaceTempView命令不同,saveAsTable将实现DataFrame的内容并创建指向Hive Metastore中数据的指针。”来自https://spark.apache.org/docs/latest/sql-programming-guide.html#saving-to-persistent-tables

注意:createOrReplaceTempView以前是registerTempTable

答案 1 :(得分:7)

CreateOrReplaceTempView将在内存上创建一个表的临时视图,此时它不是预先确定的,但您可以在其上运行sql查询。如果你想保存它,你可以坚持使用saveAsTable来保存。

首先我们以csv格式读取数据,然后转换为数据框并创建临时视图

以csv格式读取数据

action

打印架构

data.printSchema

SchemaOfTable

val data = spark.read.format("csv").option("header","true").option("inferSchema","true").load("FileStore/tables/pzufk5ib1500654887654/campaign.csv")

现在我们可以在刚创建的表视图的顶部运行SQL查询

data.createOrReplaceTempView("Data")

enter image description here

答案 2 :(得分:0)

SparkSQl支持使用Dataset和Dataframe API编写程序,并且还需要支持sql。

为了在DataFrames上支持Sql,首先需要一个带有列名称的表定义,并且如果创建表,则配置单元metastore将获得很多不必要的表,因为Spark-Sql固有地驻留在配置单元上。因此,它将创建一个临时视图,该视图暂时在hive中暂时可用,并用作任何其他hive表,一旦Spark Context停止,它将被删除。

为了创建视图,开发人员需要一个名为 createOrReplaceTempView

的实用程序