簡體   English   中英

映射分區迭代器返回

[英]Map Partition Iterator return

任何人都可以幫助接受返回給MapPartitions的Iterator listWords()方法。

object MapPartitionExample {

  def main(args: Array[String]): Unit = {

    val conf= new SparkConf().setAppName("MapPartitionExample").setMaster("local[*]")
    val sc= new SparkContext(conf)

    val input:RDD[String] = sc.parallelize(List("ABC","DEF","GHU","YHG"))

    val x= input.mapPartitions(word => listWords(word))


  }

  def listWords(words: Iterator[String]) : util.Iterator[String] = {

    val arrList = new util.ArrayList[String]()
    while( words.hasNext ) {
      arrList.add( words.next())
    }
    return arrList.iterator()
  }

}

mapPartitions使用的函數的返回類型應該是scala.collection.Iterator ,而不是java.util.Iterator 我看不到您當前代碼的重點,但是您可以使用Scala可變集合:

import scala.collection.mutable.ArrayBuffer

def listWords(words: Iterator[String]) : Iterator[String] = {
  val arr = ArrayBuffer[String]()
  while( words.hasNext ) {
    arr += words.next()
  }
  arr.toIterator
}

我個人只是map

def listWords(words: Iterator[String])  : Iterator[String] = {
   // Some init code
   words.map(someFunction)
}

Iterable[NotInferU]Iterable[NotInferU] ,但是您要返回java.util.Iterator[String]

您需要通過如下所示導入scala.collection.JavaConversions._java.util.Iterator轉換為scala Iterator

  def listWords(words: Iterator[String]) : Iterator[String] = {
    val arrList = new util.ArrayList[String]()
    while( words.hasNext ) {
      arrList.add( words.next())
    }
    import scala.collection.JavaConversions._
    return arrList.toList.iterator
  }

其余代碼保持不變。

我希望答案是有幫助的

暫無
暫無

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

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