createOrReplaceTempView如何在Spark中运行?

Abi*_*rty 35 apache-spark apache-spark-sql spark-dataframe

我是Spark和Spark SQL的新手.

如何createOrReplaceTempView在Spark工作?

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

Gar*_*n S 49

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
Run Code Online (Sandbox Code Playgroud)

只有在.count通话后才能完全缓存数据.这是证明它被缓存的证据:

缓存的nums临时视图/表

相关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

  • 这个`view` 是否创建了一个临时表?并且,`view` 在 Spark 中是否有任何特定名称,如 hive 表? (3认同)
  • 与传统的临时表不同,临时视图根本不会实现,甚至无法实现。这对于访问SQL中的数据很有用,但要了解每次访问时都要对它的语句进行求值 (3认同)
  • 是的,它实际上是一个表,但必须对其进行评估,因为它没有具体化到文件中。您可以像使用 hive 表一样使用视图(例如在原始 SQL 查询中) (2认同)

Raj*_*dra 7

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

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

以csv格式读取数据

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

打印架构

data.printSchema

SchemaOfTable

data.createOrReplaceTempView("Data")
Run Code Online (Sandbox Code Playgroud)

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

  %sql select Week as Date,Campaign Type,Engagements,Country from Data order     by Date asc
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这是一种将数据框“移动”到当前 Spark scala 工作区的可见范围以使其对 SQL 语法可见的方法吗?没有进行数据复制吗? (4认同)