2016-11-03 80 views
0

我有一個Scala的功能如下:調用函數

def variance (reg: Int, samRecords: Array[SAMRecord]) : 
    Array[(Int, (Int, String))] = 
{ 
    // Body of the function 
} 

我想調用這個函數在mapPartition方法如下:

//SortedOut is RDD[(Int,(Int,Int,SAMRecord))] 
val Out = SortedOut.mapPartitions(iter=> {val inArr = iter.map(x=>x._2._3).toArray 
             val inReg = iter.map(x=> x._1).toArray 
             if (inArr.length != 0) 
             { 
             println("Calling function") 
             variantCall(inReg(0),inArr).iterator 
             } 
             else 
             iter}).cache 

我已經檢查了SortedOut有非空的分區,但仍然沒有發生功能調用。爲什麼這段代碼不工作?我想爲每個分區調用這個函數,我該怎麼做?

回答

2

只有在執行某些操作時纔可以觸發計算。

collectcountforeach等,最後才能觸發評估

注意收集在年底

val Out = SortedOut.mapPartitions(iter=> {val inArr = iter.map(x=>x._2._3).toArray 
             val inReg = iter.map(x=> x._1).toArray 
             if (inArr.length != 0) 
             { 
             println("Calling function") 
             variantCall(inReg(0),inArr).iterator 
             } 
             else 
             iter}).cache.collect