Spark入门(四):RDD基本操作
来源:互联网 发布:三维建筑设计软件apm 编辑:程序博客网 时间:2024/05/19 02:25
1.RDD转换
RDD的所有转换操作都不会进行真正的计算
1.1单个RDD转换操作
# 创建测试RDDval rdd = sc.parallelize(Array("hello world","java","scala easy"))# 1.map():遍历RDD中的每个元素,将返回值构成新的RDD,返回值类型可和原RDD不一致val mapRdd = rdd.map(x => "map:"+x)mapRdd.foreach(println)# 输出# map:hello world# map:java# map:scala easy# 2.flatMap(): 遍历RDD中的每个元素,将返回的迭代器的所有内容构成新的 RDDval flatMapRdd = rdd.flatMap(x => x.split(" "))flatMapRdd.foreach(println)# 输出# hello# world# java# scala# easy# 3.filter():遍历RDD中的每个元素,将匹配的元素构成新的RDDval filterRdd = rdd.filter(x => x.contains("java"))filterRdd.foreach(x => x.contains("java"))filterRdd.foreach(println)# 输出# java# 4.distinct():去重val distinctRdd = flatMapRdd.distinct()distinctRdd.foreach(println)# scala# hello# easy# java# world# 5.sample(withReplacement, fraction, [seed]):对 RDD 采样,以及是否替换
1.2 两个RDD转换操作
# 创建两个测试RDDval rdd1 = sc.parallelize(Array("java","scala","spring"))val rdd2 = sc.parallelize(Array("c++","java","spark"))# 1.union():合并两个RDDval unionRdd = rdd1.union(rdd2)unionRdd.foreach(println)# java# scala# spring# c++# java# spark# 2.intersection():求两个RDD元素的共同元素val intersectionRdd = rdd1.intersection(rdd2)intersectionRdd.foreach(println)# java# 3.subtract():移除RDD中的指定元素val subtractRdd = rdd1.subtract(rdd2)subtractRdd.foreach(println)# 4.cartesian():求两个RDD元素的笛卡尔积val cartesianRdd = rdd1.cartesian(rdd2)cartesianRdd.foreach(println)# (java,c++)# (java,java)# (java,spark)# (scala,c++)# (scala,java)# (scala,spark)# (spring,c++)# (spring,java)# (spring,spark)
2.行动操作
行动操作会真正触发RDD的计算操作
2.1 reduce()
它接收一个函数作为参数,这个
函数要操作两个 RDD 的元素类型的数据并返回一个同样类型的新元素
val rdd = sc.parallelize(Array(1,2,3,4))# 计算所有元素的总和println(rdd.reduce((x,y) => x+y))# 10
2.2 fold()
fold() 和 reduce() 类似,接收一个与 reduce() 接收的函数签名相同的函数,再加上一个
“初始值”来作为每个分区第一次调用时的结果。(例如 +
对应的 0, * 对应的 1,或拼接操作对应的空列表)。
# 计算所有元素的综合println(rdd.fold(0)((x,y) => x+y))# 10
2.3 collect()
将整个RDD的内容返回
rdd.collect().foreach(print)#1234
2.4 take(n)
返回RDD中的n个元素
rdd.take(2).foreach(print)#12
2.5 top(n)
返回RDD中前n个元素,top()会使用数据的默认排序
rdd.top(3)#123
2.6 count()
返回RDD中所有元素的个数
print(rdd.count())4
2.7 countByValue()
返回个元素在RDD中出现的个数
rdd.countByValue().foreach(println+)(1,1)(3,1)(2,1)(4,1)
2.8 takeSample(withReplacement, num, [seed])
从 RDD 中返回任意num个元素
rdd.takeSample(false,3)
2.9 foreach
对 RDD 中的每个元素使用给
定的函数
2.10 aggregate(zeroValue)(seqOp, combOp)
和 reduce() 相似,可以返回不同类型的函数
val result = rdd.aggregate((0, 0))((x, y) =>(x._1 + y, x._2 + 1),(part1, part2) =>(part1._1 + part2._1,part1._2 + part2._2))print(result)(10,4)
参数说明
((0, 0))# 第一步:指定初始值((x, y) =>(x._1 + y, x._2 + 1),# 2:分片计算# x为初始值(0,0),y为RDD元素(1,2,3,4)# 假设RDD分布在两个分片上(1,2)为一个分片,(3,4)为一个分片# 则计算结果如下:# 分片1:# 0+1,0+1# 1+2,1+1# 分片1结果:(3,2)# 分片2:# 0+3,0+1# 3+4,1+1# 分片2结果:(7,2)(part1, part2) =>(part1._1 + part2._1,part1._2 + part2._2))# 第三步:合并分片数据# 3+7,2+2# 输出结果(10,4)
阅读全文
0 0
- Spark入门(四):RDD基本操作
- spark RDD 基本操作
- Spark RDD基本操作
- Spark RDD基本操作
- Spark入门RDD操作
- [Spark]Spark RDD 指南四 RDD操作
- Spark笔记:RDD基本操作(一)
- Spark笔记:RDD基本操作(上)
- Spark笔记:RDD基本操作(下)
- Spark笔记:RDD基本操作(上)
- Spark RDD API 基本操作
- Spark Pair RDD 基本操作
- spark之RDD(四)
- Spark 基础及RDD基本操作
- Spark 基础及RDD基本操作
- spark-shell基本的RDD操作
- SPARK中对RDD的基本操作
- Spark学习——RDD基本操作
- 扩展的放音收号标签
- HYSBZ
- Django 基础教程 视图与网址
- Python爬虫之爬取——限制下载速度
- samba
- Spark入门(四):RDD基本操作
- 1414: Kick Ass [字符串]
- java面向对象,什么是对象,什么是类,如何理解,怎么使用
- 【转发】JavaScript:世界上误解最深的语言
- 分享下多年积累的对JAVA程序员成长之路的总结
- SoapUI & Groovy接口自动化测试的简单扩展
- android N中Settings新功能全面解析
- 使用gSOAP进行Webservice开发总结
- 通过adb 命令重启手机与关机广播的问题