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通话后才能完全缓存数据.这是证明它被缓存的证据:
相关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
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
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)
| 归档时间: |
|
| 查看次数: |
62871 次 |
| 最近记录: |