Learning Spark笔记5-持久化(缓存)

持久化(缓存)


之前讨论过,Spark RDDs是lazily evaluated,我们可能会多次使用同一个RDD。如果这样做的话,每次在RDD上调用一个动作时,Spark都将重新计算RDD以及它的所有依赖。对于迭代算法就特别的耗费资源,下面是一个计数的例子。


Example 3-39. Double execution in Scala


val result = input.map(x => x*x)
println(result.count())
println(result.collect().mkString(","))


防止多次一个RDD,我们可以让Spark持久化数据。当我们让Spark持久化一个RDD的时候,计算RDD的节点会存储他们的分区。如果在一个节点上持久化时失败了,那么Spark会根据需要重新计算丢失数据的分区。如果我们不想要让集群变慢,那么我们就可以在复制多个数据到不同的节点上。


Spark可以根据不同的目的,支持不同级别的持久化。在Scala和Java中,默认的persist()会将数据以非序列化对象形式保存在JVM堆中。对于Python,通常是序列化数据到持久化的存储。


堆栈缓存还是实验性的,这里使用了Tachyon。


Example 3-40. persist() in Scala
val result = input.map(x => x * x)
result.persist(StorageLevel.DISK_ONLY)
println(result.count())
println(result.collect().mkString(","))


注意我们在第一个动作之前调用persist()。


如果在内存中存储了太多的数据,Spark将使用最近最少(LRU)缓存策略自动释放旧分区。对于仅内存存储级别,下次它被访问时会重新计算所有分区,但对于内存-磁盘的方式,它会将他们写到磁盘上。


RDDs有一个unpersist(),可以手动删除缓存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艺菲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值