簡體   English   中英

如何在沒有本地迭代器的情況下返回Spark RDD分區值?

[英]How do I return Spark RDD partition values without a local iterator?

我正在學習Spark及其與RDD分區分布有關的並行性。 我有一台4 CPU的計算機,因此我有4個並行單元。 要返回分區索引“ 0”的成員,我找不到不強制RDD使用localIterator的方法來返回此分區。

我習慣火花很簡潔。 是否有更簡潔的方法來按分區過濾RDD? 以下兩種方法有效,但看起來很笨拙。

scala> val data = 1 to 20
data: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)

scala> val distData = sc.parallelize(data)
distData: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[75] at parallelize at <console>:26

scala> distData.mapPartitionsWithIndex{
   (index,it) => {
      it.toList.map(x => if (index == 0) (x)).iterator
   }
}.toLocalIterator.toList.filterNot(
   _.isInstanceOf[Unit]
)
res107: List[AnyVal] = List(1, 2, 3, 4, 5)

scala> distData.mapPartitionsWithIndex{
   (index,it) => {
      it.toList.map(x => if (index == 0) (x)).iterator
   }
}.toLocalIterator.toList.filter(
   _ match{
      case x: Unit => false
      case x => true
   }
)
res108: List[AnyVal] = List(1, 2, 3, 4, 5)
distData.mapPartitionsWithIndex{ (index, it) => 
      if (index == 0) it else Array[Int]().iterator
}

您可以返回一個空的迭代器,它將正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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