美文网首页
Spark算子:RDD基本转换操作(7)–zipWithInde

Spark算子:RDD基本转换操作(7)–zipWithInde

作者: 达微 | 来源:发表于2019-04-19 09:15 被阅读0次

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

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

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

    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))
     
    zipWithUniqueId
    def zipWithUniqueId(): RDD[(T, Long)]
    

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

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

    每个分区中第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

    相关文章

      网友评论

          本文标题:Spark算子:RDD基本转换操作(7)–zipWithInde

          本文链接:https://www.haomeiwen.com/subject/ulvfgqtx.html