Spark:createTempView创建临时表和cache/persist缓存区别

一、问题

Dataframe进行createTempView创建一个别名,但是何时执行,以及和cache/persist区别是什么,都是需要弄清楚,才能进一步优化。

二、原理解释

1.createTempView运作原理

Spark中的算子包含transformation算子和action算子,transformation是根据原有RDD创建一个新的RDD,而action则把RDD操作后的结果返回给driver。Spark对transformation的抽象可以大大提高性能,这是因为在Spark中,所有transformation操作都是lazy模式,即Spark不会立即计算结果,而只是简单地记住所有对数据集的转换操作逻辑。这些转换只有遇到action操作的时候才会开始计算。这样的设计使得Spark更加高效。
因为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可以理解为一个dataframe的代名词。当执行这个视图名词的时候,就是把这个dataframe直接带入逻辑DAG图,最后在遇到action算子后,重新计算。


2.cache/persist原理

cache/persist就是数据持久化的原理,当运行action后,才会将数据持久化到内存或者磁盘(依据缓存级别)。当下一次需要运行这个RDD的时候,可以直接从这个RDD获取,而不需要重新计算。

三、优化

1.createTempView优化

(1)在之后添加缓存

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

(2)在创建视图的dataframe之前添加缓存

val df=sql("select a,b from table where xxx")
df.cache()
df.createTempView("view1")

加上缓存之后,再去查,可以提升效率


四、总结

1.Spark的运作原理

没有进行缓存操作,数据就没有真正的保存。只有执行了action算子,spark才真正的开始运算,否则全部都是记录执行的逻辑而已。


五、参考

1.https://blog.csdn.net/Android_xue/article/details/104047830
2.https://stackoverflow.com/questions/51477876/what-is-the-difference-between-createorreplacetempviewviewname-and-cache-on

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值