当前位置:   article > 正文

spark 缓存表的使用_spark cache table

spark cache table

spark 几种缓存数据的方法

1- 缓存表

1、cache table

//缓存全表
sqlContext.sql("CACHE TABLE activity")

//缓存过滤结果
sqlContext.sql("CACHE TABLE activity_cached as select * from activity where ...")
  • 1
  • 2
  • 3
  • 4
  • 5

CACHE TABLE是即时生效(eager)的,如果你想等到一个action操作再缓存数据可以使用CACHE LAZY TABLE,这样操作会直到一个action操作才被触发,例如count(*)

sqlContext.sql("CACHE LAZY TABLE ...")
// 取消缓存表
sqlContext.sql("UNCACHE TABLE activity")
  • 1
  • 2
  • 3

2、将dataFrame注册成表并缓存

val df = sqlContext.sql("select * from activity")
df.registerTempTable("activity_cached")
sqlContext.cacheTable("activity_cached")

//Tip:cacheTable操作是lazy的,需要一个action操作来触发缓存操作。

//对应的uncacheTable可以取消缓存
sqlContext.uncacheTable("activity_cached")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3、缓存dataFrame

val df = sqlContext.sql("select * from tableName")
df.cache()
  • 1
  • 2

2-缓存结果查看

3-缓存参数设置

//该参数默认为10M,在进行join等聚合操作时,将小于该值的表broadcast到每台worker,消除了大量的shuffle操作。
spark.sql.autoBroadcastJoinThreshold
//将rdd存入mem或disk前再进行一次压缩,效果显著,我使用cacheTable了一张表,没有开启该参数前总共cache了54G数据,开启这个参数后只34G,可是执行速度并没有收到太大的影响。
spark.rdd.compress true
//这个参数默认为200,是join等聚合操作的并行度,
spark.sql.shuffle.partitions
//如果有大量的数据进行操作,造成单个任务比较重,运行时间过长的时候,会报如下的错误:
org.apache.spark.shuffle.FetchFailedException: Connection from /192.168.xx.xxx:53450 closed
//这个时候需要提高该值。

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/734905
推荐阅读
相关标签
  

闽ICP备14008679号