Spark算子:RDD基本转换操作(7)–zipWithIndex、zipWithUniqueId

关键字:Spark算子、Spark RDD基本转换、zipWithIndex、zipWithUniqueId

zipWithIndex

def zipWithIndex(): RDD[(T, Long)]

该函数将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键/值对。

 
 
  1. scala> var rdd2 = sc.makeRDD(Seq("A","B","R","D","F"),2)
  2. rdd2: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[34] at makeRDD at :21
  3.  
  4. scala> rdd2.zipWithIndex().collect
  5. res27: Array[(String, Long)] = Array((A,0), (B,1), (R,2), (D,3), (F,4))
  6.  

zipWithUniqueId

def zipWithUniqueId(): RDD[(T, Long)]

该函数将RDD中元素和一个唯一ID组合成键/值对,该唯一ID生成算法如下:

每个分区中第一个元素的唯一ID值为:该分区索引号,

每个分区中第N个元素的唯一ID值为:(前一个元素的唯一ID值) + (该RDD总的分区数)

看下面的例子:

 
 
  1. scala> var rdd1 = sc.makeRDD(Seq("A","B","C","D","E","F"),2)
  2. rdd1: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[44] at makeRDD at :21
  3. //rdd1有两个分区,
  4. scala> rdd1.zipWithUniqueId().collect
  5. res32: Array[(String, Long)] = Array((A,0), (B,2), (C,4), (D,1), (E,3), (F,5))
  6. //总分区数为2
  7. //第一个分区第一个元素ID为0,第二个分区第一个元素ID为1
  8. //第一个分区第二个元素ID为0+2=2,第一个分区第三个元素ID为2+2=4
  9. //第二个分区第二个元素ID为1+2=3,第二个分区第三个元素ID为3+2=5
  10. 更多关于Spark算子的介绍,可参考spark算子系列文章:

    http://blog.csdn.net/ljp812184246/article/details/53895299 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值