在mapPartition Spark中调用函数

时间:2016-11-03 20:56:35

标签: scala apache-spark

我有一个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是否有非空分区,但仍然没有进行功能调用。为什么这段代码不起作用?我想为每个分区调用此函数,我该怎么做?

1 个答案:

答案 0 :(得分: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