Spark API深度解析:数据处理与RDD依赖
1. zipPartitions转换
zipPartitions 可以将两个RDD的分区进行合并,生成一个新的RDD。需要注意的是,在Python(v.1.4)中,该功能不可用。此转换有一个可选参数 preservesPartitioning ,默认值为 false 。若能确保函数处理后数据分区不变,可将其设为 true ,否则分区器会被移除,后续转换时会进行洗牌操作。
以下是一个示例:
scala> val rdd1 = sc.parallelize(1 to 10, 10)
scala> val rdd2 = sc.parallelize((1 to 8).map(x=>"n"+x), 10)
scala> rdd1.zipPartitions(rdd2, true)((iter1, iter2) => {
iter1.zipAll(iter2, -1, "empty")
.map({case(x1, x2)=>x1+"-"+x2})
}).collect()
res1: Array[String] = Array(1-empty, 2-n1, 3-n2, 4-n3, 5-n4, 6-empty, 7-n5,
8-n6, 9-n7, 10-n8)
这里使用了Scala的 zipAll 函数,它能
超级会员免费看
订阅专栏 解锁全文
1204

被折叠的 条评论
为什么被折叠?



