2015-10-20 304 views
-1

我想使用的,而不是使用mapmapPartitions功能,問題是,我想傳遞一個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. 重寫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)