栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Spark createTempView数据存哪了?

Spark createTempView数据存哪了?

前言


createTempView运实习生很苦恼,为什么我使用了createTempView创建临时视图,每次查询的这个视图特别的耗时呢?这个数据难道没有存在内存而是本地?
我问:你的视图缓存了吗?
实习生:视图缓存?一般我只缓存Dataframe,比如如果要复用Dataframe我就会调用df.cache()方法,视图也要缓存?怎么缓存?

createTempView运作原理

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

有了以上的知识,就不难理解为什么实习生使用createTempView后,查询这个视图每次都很耗时了,正是因为createTempView操作是lazy模式,在没有action算子触发之前,它并没有什么实质性的运作,仅仅记录了一个创建视图的逻辑。
举个栗子:

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()

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

如何给createTempView加缓存

直接上代码:

spark.table("view1").cache()

加上缓存之后,再去查,发现效率非常快,几乎是秒读。

后记

一定要深刻理解Spark的运作原理,没有进行缓存操作,数据就没有真正的保存,只有执行了action算子,spark才真正的开始运算,否则全部都是记录执行的逻辑而已

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/584625.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号