note 1
这里只是将我学习初期笔记拿来分享,没有做太多精细的推理验证,如有错误,希望指正。
note 2
整个算子系列应用的测试数据是相同的,在本系列第一篇Spark-Operator-Map中有完整的测试数据
note 3
因为工作环境如此,我个人使用Java+Scala混合开发,请知悉
note 4
代码版本
-Spark2.2
-Scala2.11
- 源码
/**
* Return an RDD created by coalescing all elements within each partition into an array.
*/
def glom(): RDD[Array[T]] = withScope {
new MapPartitionsRDD[Array[T], T](this, (context, pid, iter) => Iterator(iter.toArray))
}
作用: 把rdd的每个分区的内容用一个Array存起来
测试代码
object TestGlom {
val ss = SparkSession.builder().master("local").appName("basic").getOrCreate()
val sc = ss.sparkContext
sc.setLogLevel("error")
val rdd = sc.textFile("/home/missingli/IdeaProjects/SparkLearn/src/main/resources/sparkbasic.txt")
val rdd2 = sc.textFile("/home/missingli/IdeaProjects/SparkLearn/src/main/resources/sparkbasic3.txt")
def main(args: Array[String]): Unit = {
val rdd3 = rdd++ rdd2
rdd3.glom().foreach(r=>{
for(str <- r){
println(str)
}
println("--------------")
})
}
}
输出
1,a,c,b
2,w,gd,h
3,h,r,x
4,6,s,b
5,h,d,o
6,q,w,e
--------------
3,h,r,x
4,6,s,b
5,h,d,o
6,q,w,e
7,j,s,b
8,h,m,o
9,q,w,c
--------------
- 这里就是做了一下简单的测试
- 每个文件回被读取成一个RDD(文件很小),然后合并起来成了一个两分区的RDD
- 用glom方法返回一个Array,遍历这个Array看看效果