Spark RDD で要素の範囲を選択したいと思います。たとえば、100 個の要素を持つ RDD があり、60 から 80 までの要素を選択する必要があります。
RDD には、最初の i 要素を返す take(i: int) メソッドがあることがわかります。しかし、最後の i 要素、または特定のインデックスから始まる途中から i 要素を取得する対応するメソッドはありません。
Spark RDD で要素の範囲を選択したいと思います。たとえば、100 個の要素を持つ RDD があり、60 から 80 までの要素を選択する必要があります。
RDD には、最初の i 要素を返す take(i: int) メソッドがあることがわかります。しかし、最後の i 要素、または特定のインデックスから始まる途中から i 要素を取得する対応するメソッドはありません。
データセットの大きさは? あなたはあなたが必要とすることをすることができるかもしれません:
data.take(80).drop(59)
これは非効率に思えますが、小規模から中規模のデータの場合はうまくいくはずです。
これを別の方法で解決することは可能ですか?データの真ん中から正確に特定の範囲を選択する場合はどうなりますか? takeSample
より良いサービスを提供しますか?
以下は、範囲を取得できるはずです。zipWithIndex は内部的に RDD パーティションをスキャンして各パーティションの要素数を取得する必要があるため、キャッシュによってオーバーヘッドが節約されることに注意してください。
scala>val r1 = sc.parallelize(List("a", "b", "c", "d", "e", "f", "g"), 3).cache
scala>val r2 = r1.zipWithIndex
scala>val r3 = r2.filter(x=> {x._2>2 && x._2 < 4}).map(x=>x._1)
scala>r3.foreach(println)
d