the hotel ink and the hotel pen, where
一个简单的例子
// 需要对名为逗hello.txt地的hdfs文件进行一次map操作,再进行一次reduce操作。也就是说,需要对一份数据执行两次算子操作。
// 错误的做法:对于同一份数据执行多次算子操作时,创建多个rdd。
// 这里执行了两次textfile方法,针对同一个hdfs文件,创建了两个rdd出来,然后分别对每个rdd都执行了一个算子操作。
// 这种情况下,spark需要从hdfs上两次加载hello.txt文件的内容,并创建两个单独的rdd;第二次加载hdfs文件以及创建rdd的性能开销,很明显是白白浪费掉的。
val rdd1 = sc.textfile("hdfs://192.168.0.1:9000/hello.txt")
rdd1.map(...)
val rdd2 = sc.textfile("hdfs://192.168.0.1:9000/hello.txt")
rdd2.reduce(...)
// 正确的用法:对于一份数据执行多次算子操作时,只使用一个rdd。
// 这种写法很明显比上一种写法要好多了,因为我们对于同一份数据只创建了一个rdd,然后对这一个rdd执行了多次算子操作。
// 但是要注意到这里为止优化还没有结束,由于rdd1被执行了两次算子操作,第二次执行reduce操作的时候,还会再次从源头处重新计算一次rdd1的数据,因此还是会有重复计算的性能开销。
// 要彻底解决这个问题,必须结合逗原则三:对多次使用的rdd进行持久化地,才能保证一个rdd被多次使用时只被计算一次。
val rdd1 = sc.textfile("hdfs://192.168.0.1:9000/hello.txt")
rdd1.map(...)
rdd1.reduce(...)
用户登录
还没有账号?立即注册
用户注册
投稿取消
| 文章分类: |
|
还能输入300字
上传中....
Mars符号