[英]How to copy a range of elements in RDD into a smaller RDD
我有以下RDD [String]:
val rdd = sc.makeRDD(Seq("paul", "jim,", "joe", "mary", "sean", "peter", "lucy"))
我想做的是通過能夠將一系列行從上述主rdd復制到較小的rdd來生成較小的RDD。
用例:當在火花中旋轉RDD時,可能會出現異常情況,而RDD中的某些行/記錄往往會引起問題。
確實能夠以編程方式將一個復制到另一個使用了有用的功能,因為我找不到固定的rdd方法來執行此操作。 請在下面查看我的解決方案。
val rdd = sc.makeRDD(Seq("paul", "jim", "joe", "mary", "sean", "peter", "lucy"))
val startIndex = 1
val endIndex = 5
val shortRdd=rdd.zipWithIndex().filter { case (_, idx) => idx >= startIndex && idx <= endIndex }.map(p=>p._1)
shortRdd.count
shortRdd.foreach(println)
步驟1:讓我們看看RDD中的內容:
rdd.foreach(println)
peter
lucy
jim
joe
paul
mary
sean
步驟2:將轉換應用於附加索引,請注意,索引值現已應用於每行。
rdd.zipWithIndex().foreach(println)
(peter,5)
(jim,1)
(joe,2)
(paul,0)
(mary,3)
(sean,4)
(lucy,6)
步驟3:在索引位置上應用過濾器,在開始和結束索引位置之間拉出索引
rdd.zipWithIndex().filter { case (_, idx) => idx >= startIndex && idx <= endIndex }.foreach(println)
(mary,3)
(sean,4)
(jim,1)
(peter,5)
(joe,2)
第4步:映射回每行中的單個元素
rdd.zipWithIndex().filter { case (_, idx) => idx >= startIndex && idx <= endIndex }.map(p=>p._1).foreach(println)
mary
jim
joe
peter
sean
我在RDD上執行了此過程,行數為10萬或更多,沒有任何問題。 讓我知道如何在更大的RDD下執行。
而已! 保羅
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.