簡體   English   中英

如何將RDD中的一系列元素復制到較小的RDD中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM