我试图在 Scala 中使用 mapPartitions 但收到以下错误。

[error]  found   : Unit
[error]  required: Iterator[?]
[error] Error occurred in an application involving default arguments.
[error]         rdd.mapPartitions(showParts)

我调用 mapPartitions 函数如下。
rdd.mapPartitions(showParts)

其中 showParts 函数定义如下。
def showParts(iter: Iterator[(Long, Array[String])]) =
{
  while (iter.hasNext)
  {
    val cur = iter.next;
    // Do something with cur
  }
}

在这里使用 mapPartitions 的正确方法是什么?

最佳答案

问题是您传递给 mapPartitions 的 UDF 必须具有 Iterator[U] 的返回类型。您当前的代码不返回任何内容,因此属于 Unit 类型。

如果您想在执行 RDD 后获得一个空的 mapPartitions 那么您可以执行以下操作:

def showParts(iter: Iterator[(Long, Array[String])]) =
{
  while (iter.hasNext)
  {
    val cur = iter.next;
    // Do something with cur
  }

  // return Iterator[U]
  Iterator.empty
}

关于java - 如何在 Scala 中使用 mapPartitions?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31605440/

10-12 04:49