Spark算子:RDD基本轉換操作(7)–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

轉載請注明:lxw的大數據田地 » Spark算子:RDD基本轉換操作(7)–zipWithIndex、zipWithUniqueId


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM