val a: RDD[Int]= sc.parallelize(1 to 10)//过滤出a中的偶数,形成新的算子bval b: RDD[Int]= a.filter(x => x %2==0)
b.collect().foreach(println)246810
转换算子(flaterMap)
flatMap:该算子由两部分组成,先是Map()就是遍历对每个元素进行操作,然后flatten()即展开
wordcount:单词统计举例
val rdd3: RDD[String]= sc.textFile("file:///E:\\hello.txt")
hello.txt文件内容:
hello java
hello china
hello python
hello mysql
good good study
rdd3.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey((x,y)=>x+y).foreach(println)
原理:先是拿到rdd的每一行,然后按空格进行拆分split(),成为一个数组,然后拿到该数组,将数组的值转变为(值,1)元组的这种形式,最后展开flatMap(),例如(hello,1),(java,1),(hello,1),然后通过reduceByKey()对相同key的值进行相加,最终输出
最终结果:
(python,2)(up,1)(day,2)(good,4)(mysql,2)(china,2)(hello,8)(study,2)(java,2)
转换算子(mapPartitions)
mapPartitions:mapPartitions对每一个分区的数据进行操作,可以先用mapPartitions拿到每一个分区的数据,再用map对当前分区的每一个元素进行操作
val a: RDD[Int]= sc.parallelize(