Spark临时表tempView的注册/使用/注销/注意事项(推荐)

随心笔谈12个月前发布 admin
85 0



目录createTempView运作原理低效做法缓存临时表方式:方式1 创建方式2方式3临时表生命周期

先说一个众人皆知的知识:

Spark中的算子包含transformation算子和action算子,transformation是根据原有RDD创建一个新的RDD,而action则把RDD操作后的结果返回给driver。Spark对transformation的抽象可以大大提高性能,这是因为在Spark中,所有transformation操作都是lazy模式,即Spark不会立即计算结果,而只是简单地记住所有对数据集的转换操作逻辑。这些转换只有遇到action操作的时候才会开始计算。这样的设计使得Spark更加高效。

sql(“select a,b from table where xxx”).createTempView(“view1”)
sql(“select a from view1 where xxx”).show()
sql(“select b from view1 where xxx”).show()

使用createTempView后,查询这个视图每次都很耗时了,正是因为createTempView操作是lazy模式,在没有action算子触发之前,它并没有什么实质性的运作,。

Spark每次遇到action算子show()方法的时候,才开始真正计算,上面代码中两次用到,那么意味着创建视图的方法,因此非常的耗时,所以需要对。

// 创建它的SparkSession对象终止前有效
df.createOrReplaceTempView(“tempViewName”)
// spark应用程序终止前有效
df.createOrReplaceGlobalTempView(“tempViewName”)

注销

spark.catalog.dropTempView(“tempViewName”)
spark.catalog.dropGlobalTempView(“tempViewName”)

创建

session.table(“tempViewName”).cache()

注销

session.table(“tempViewName”).unpersist()

创建

commonDF.cahe() 或 commonDF.persist(StorageLevel.MEMORY_AND_DISK)
commonDF.createOrReplaceTempView(“tempViewName”)

注销

commonDF.unpersist()

源码

createOrReplaceTempView

def createOrReplaceTempView(viewName: String): Unit=withPlan {
createTempViewCommand(viewName, replace=true, global=false)
}

也就是说,当一下代码中spark stop(),之后 创建的临时视图表才失效

createGlobalTempView

@throws[AnalysisException]
def createGlobalTempView(viewName: String): Unit=withPlan {
createTempViewCommand(viewName, replace=false, global=true)
}

到此这篇关于Spark临时表tempView的注册/使用/注销/注意事项的文章就介绍到这了,更多相关Spark临时表tempView内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:Spark?GraphX?分布式图处理框架图算法详解pyspark自定义UDAF函数调用报错问题解决PySpark与GraphFrames的安装与使用环境搭建过程SparkSQL快速入门教程Pyspark 线性回归梯度下降交叉验证知识点详解Spark中的数据读取保存和累加器实例详解

© 版权声明

相关文章