Apache spark 使用sparksql的临时表缓存
使用Apache spark 使用sparksql的临时表缓存,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,使用registerTempable(createOrReplaceTempViewwithspark 2.+)注册的表是否缓存 使用齐柏林飞艇,经过大量计算后,我在scala代码中注册了一个数据帧,然后在%pyspark中我想访问它,并进一步过滤它 它会使用内存缓存版本的表吗?还是每次都要重建?不是。您应该显式缓存: sqlContext.cacheTable("someTable") 注册的表不会缓存在内存中 registerEmptablecreateOrReplaceTempView方
registerTempable
(createOrReplaceTempView
withspark 2.+)注册的表是否缓存
使用齐柏林飞艇,经过大量计算后,我在scala代码中注册了一个数据帧
,然后在%pyspark
中我想访问它,并进一步过滤它
它会使用内存缓存版本的表吗?还是每次都要重建?不是。您应该显式缓存:
sqlContext.cacheTable("someTable")
注册的表不会缓存在内存中
registerEmptable
createOrReplaceTempView
方法将只创建给定的DataFrame
的视图,或用给定的查询计划替换该视图
如果需要创建永久视图,它将把查询计划转换为规范化的SQL字符串,并将其作为视图文本存储在metastore中
您需要显式缓存数据帧。e、 g:
df.createOrReplaceTempView("my_table") # df.registerTempTable("my_table") for spark <2.+
spark.cacheTable("my_table")
现在,使用cache.registerEmptable
cache.createOrReplaceTempView
执行相同的示例:
scala> val df = Seq(("1",2),("b",3)).toDF
// df: org.apache.spark.sql.DataFrame = [_1: string, _2: int]
scala> sc.getPersistentRDDs
// res0: scala.collection.Map[Int,org.apache.spark.rdd.RDD[_]] = Map()
scala> df.createOrReplaceTempView("my_table")
scala> sc.getPersistentRDDs
// res2: scala.collection.Map[Int,org.apache.spark.rdd.RDD[_]] = Map()
scala> spark.catalog.cacheTable("my_table") // spark.cacheTable("...") before spark 2.0
scala> sc.getPersistentRDDs
// res4: scala.collection.Map[Int,org.apache.spark.rdd.RDD[_]] = Map(2 -> In-memory table my_table MapPartitionsRDD[2] at cacheTable at <console>:26)
scala> sc.getPersistentRDDs
// res2: scala.collection.Map[Int,org.apache.spark.rdd.RDD[_]] = Map()
scala> val df = Seq(("1",2),("b",3)).toDF
// df: org.apache.spark.sql.DataFrame = [_1: string, _2: int]
scala> df.createOrReplaceTempView("my_table")
scala> sc.getPersistentRDDs
// res4: scala.collection.Map[Int,org.apache.spark.rdd.RDD[_]] = Map()
scala> df.cache.createOrReplaceTempView("my_table")
scala> sc.getPersistentRDDs
// res6: scala.collection.Map[Int,org.apache.spark.rdd.RDD[_]] =
// Map(2 -> ConvertToUnsafe
// +- LocalTableScan [_1#0,_2#1], [[1,2],[b,3]]
// MapPartitionsRDD[2] at cache at <console>:28)
scala>sc.getPersistentRDDs
//res2:scala.collection.Map[Int,org.apache.spark.rdd.rdd[]]=Map()
scala>val df=Seq((“1”,2),(“b”,3)).toDF
//df:org.apache.spark.sql.DataFrame=[\u 1:string,\u 2:int]
scala>df.createOrReplaceTempView(“我的表格”)
scala>sc.getPersistentRDDs
//res4:scala.collection.Map[Int,org.apache.spark.rdd.rdd[]]=Map()
scala>df.cache.createOrReplaceTempView(“我的表”)
scala>sc.getPersistentRDDs
//res6:scala.collection.Map[Int,org.apache.spark.rdd.rdd[]]
//地图(2->ConvertToUnsafe
//+-LocalTableScan[_1#0,_2#1],[1,2],[b,3]]
//缓存中的MapPartitionsRDD[2]位于:28)
那么df.cache.registerTempTable实际上是无用的?@toofrellik你是什么意思?那么cacheTable
与cache.createOrReplaceTempView
在功能和功能上是否相同performance@toofrellikcacheTable
和cache
与您的行为相同,但计划不同你可以看到上面。OP不想知道如何缓存临时表,因为createOrReplaceTempView
本身无法做到这一点。