sparkRDD的持久化问题

spark的rdd与其他dataSet都可以做持久化,关于持久化的等级也可根据自身需求选择关于持久化等级可查看官网

http://spark.apache.org/docs/latest/rdd-programming-guide.html#rdd-persistence

这里记录一次关于持久化的直观感受;

在项目中需要对一批数据做三次校验,1.通用校验,2.字段名称合法性校验,3.字段值得类型校验。由于需要对通过每一次校验的结果做统计来写报告所以伪代码如下:

val rdd1 = rdd.filter(通用校验)
//统计数量
county1 = rdd1.count()

val rdd2 = rdd1.filter(名称合法性校验)
//统计合法数量
county2 = rdd2.count()

val rdd3 = rdd2.filter(类型校验)
//统计类型校验通过的数量
county3 = rdd3.count()


//每种校验都打印当前校验的名称

当测试代码的时候发现:当开始最后一步类型校验的时候会把前两种校验也给打印出来,这说明在最后一步校验时使用的额rdd2是通过有最初的rdd重新计算得到的,这就很可怕了,我不能为了你个统计数字重复这么大量的工作啊。所以想到了持久化的问题将代码做如下处理:

val rdd1 = rdd.filter(通用校验)
//统计数量
county1 = rdd1.count()

val rdd2 = rdd1.filter(名称合法性校验)
//统计合法数量
county2 = rdd2.count()

//*****************************持久化********************************//
rdd2.persist(StorageLevel.MEMORY_ONLY)

val rdd3 = rdd2.filter(类型校验)
//统计类型校验通过的数量
county3 = rdd3.count()


//每种校验都打印当前校验的名称

然后再观察日志就会看到最后一步只打印value类型校验的日志。但是这种方法有一个问题就是持久化需要内存或者磁盘,前者性能较好,但是安全性和资源占用比较严重,后者磁盘IO严重,当然这不在今天的讨论范围之内,针对我的这个需求有更好的解决方案。

最后附两张日志图片

持久化之前的日志持久化之后的日志

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值