如何将参数传递给传递给 mapPartitions 的函数?

zhe*_*gjw 1 scala apache-spark

我正在尝试使用mapPartitionsfunction 而不是 using map,问题是我想将 anArray作为参数传递,但mapPartitions不作为参数传递Array。如何将数组作为参数传递?

mapPartitions[U: ClassTag](
    f: Iterator[T] => Iterator[U], preservesPartitioning: Boolean = false)
Run Code Online (Sandbox Code Playgroud)

zer*_*323 6

不清楚你在问什么,所以我猜你有一个或多或少看起来像这样的函数:

def foo(iter: Iterator[T], xs: Array[V]): Iterator[U] = ???
Run Code Online (Sandbox Code Playgroud)

并且您想将其传递给mapPartitions.

您有三个选择:

  1. 使用匿名函数:

    val xs: Array[V] = ???
    val rdd: RDD[U] = ???
    
    rdd.mapPartitions(iter => foo(iter, xs))
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重写foo以支持柯里化:

    def foo(xs: Array[V])(iter: Iterator[T]): Iterator[U] = ??? // Rest as before
    
    rdd.mapPartitions(foo(xs))
    
    Run Code Online (Sandbox Code Playgroud)
  3. 咖喱foo是这样的:

    val bar = (iter: Iterator[T]) => foo(iter, xs))
    
    rdd.mapPartitions(bar)
    
    Run Code Online (Sandbox Code Playgroud)