A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

http://spark.apache.org/docs/lat ... tml#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严重,当然这不在今天的讨论范围之内,针对我的这个需求有更好的解决方案。


---------------------
作者:向阳飞行
来源:CSDN
原文:https://blog.csdn.net/bigdataprimary/article/details/84176844
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马