2015-10-20 2 views
-1

Я пытаюсь использовать функцию mapPartitions вместо использования map, проблема в том, что я хочу передать Array в качестве аргумента, но mapPartitions не принимает Array в качестве аргумента. Как передать массив в качестве аргумента?Как передать аргумент функции, переданной в mapPartitions?

mapPartitions[U: ClassTag](
    f: Iterator[T] => Iterator[U], preservesPartitioning: Boolean = false) 
+0

Вы пытаетесь получить доступ к данным в массиве в 'mapPartitions'? Если это так, вы можете просто передать массив как переменную. –

+0

Не могли бы вы [принять ответ] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) или объяснить, почему он не работает для вас, так что это может быть улучшен? У вас также есть довольно много других вопросов с ответом, просто требующим принятия. Заранее спасибо. – zero323

ответ

2

Это не ясно, что вы спрашиваете, так что я собираюсь предположить, что у вас есть функция, которая выглядит более или менее, как это:

def foo(iter: Iterator[T], xs: Array[V]): Iterator[U] = ??? 

и вы хотите передать его mapPartitions ,

У вас есть три варианта:

  1. Использование анонимной функции:

    val xs: Array[V] = ??? 
    val rdd: RDD[U] = ??? 
    
    rdd.mapPartitions(iter => foo(iter, xs)) 
    
  2. Rewrite foo для поддержки карринг:

    def foo(xs: Array[V])(iter: Iterator[T]): Iterator[U] = ??? // Rest as before 
    
    rdd.mapPartitions(foo(xs)) 
    
  3. Карри foo так:

    val bar = (iter: Iterator[T]) => foo(iter, xs)) 
    
    rdd.mapPartitions(bar) 
    
Смежные вопросы