2016-09-06 9 views
0

RDDから最初の1000アイテムを取り出してRDDから削除する効率的な方法はありますか?スパーク・テイク・アンド・ダブ

現在、私がやっている何がある:

small_array = big_sorted_rdd.take(1000) 
big_sorted_rdd_without_small_array = big_sorted_rdd.subtract(
    sc.parallize(small_array)) 

答えて

0

これはRDDがそのように1000の最初の項目を定義することは単純ではありません(名前の状態として)配布されているため行うにまっすぐ進むものではありません。

しかし、提案したもの以外のことを達成する方法があります。

まず、アイテムの順序付けを定義できます。たとえば、すべてのアイテムをタプルに変換することができます。(number、item)numberは1から#までの要素になります。そして、最初のX項目をカットするRDDにフィルタを使用します。

big_rdd.filter(_._1 > 1000) 

第二にアイデアを、私はX最初の要素を取り除くために必要な時間は、項目の上に反復計算を実行するために(私は私がしようとした一回覚えましたシステムの負荷を軽減します)。だから、あなたが何ができるかを、各チャンク1000個の要素の部分にデータを分割され、その後、一度にチャンクを取り、その上にあなたの計算を実行し、RDDは次のようになります

RDD[(chunkNumber, List[elements])] 

は、あなたが動作します

Array[RDD[elements]] 

そして、1000個の要素のRDDに毎回仕事(配列の反復処理)

0

ヴァルzippedRDD = RDD:1000個の要素たびに、さらにこの考え方を取って、あなたのデータセットは次のように見えるようにすることができます。 zipWithIndex()

ヴァルneededRDD = rdd.filter

ヴァルunNeededRDD = rdd.filter(T => t._2> = 1000)

(T =、> 1000 < t._2)
関連する問題