1、zipWithIndex:def zipWithIndex(): RDD[(T, Long)]
该函数是将RDD中的元素和该元素在RDD中的位置(索引号)组合成键值对,并返回一个元素为键值对的新RDD。
scala> var rdd2 = sc.makeRDD(Seq("A","B","R","D","F"),2)
rdd2: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[34] at makeRDD at :21
scala> rdd2.zipWithIndex().collect
res27: Array[(String, Long)] = Array((A,0), (B,1), (R,2), (D,3), (F,4))
2、zipWithUniqueId:def zipWithUniqueId(): RDD[(T, Long)]
该函数是将RDD中的元素和唯一ID组合成键值对,生产ID的规则如下:
(1)每个分区中第一个元素的唯一ID是:该分区的索引号;
(2)每个分区中第N个元素的唯一ID是:前一个元素的唯一ID +该RDD的总分区数;
scala> var rdd1 = sc.makeRDD(Seq("A","B","C","D","E","F"),2)
rdd1: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[44] at makeRDD at :21
//rdd1有两个分区,
scala> rdd1.zipWithUniqueId().collect
res32: Array[(String, Long)] = Array((A,0), (B,2), (C,4), (D,1), (E,3), (F,5))
//总分区数为2
//第一个分区第一个元素ID为0,第二个分区第一个元素ID为1
//第一个分区第二个元素ID为0+2=2,第一个分区第三个元素ID为2+2=4
//第二个分区第二个元素ID为1+2=3,第二个分区第三个元素ID为3+2=5