迭代RDD中的列

时间:2014-09-25 11:17:02

标签: scala apache-spark rdd

我正在研究RDD,我对如何通过循环技术迭代单个元组中的列感到困惑。例如,类似于以下内容:

def doSomething(rdd: RDD[(Int, Int, Int)], col: Int) = {
     for(i <- 0 until col) {
         val count = rdd.map(f => f._i).count //how to use 'i' to iterate?
     }
}

虽然这是一个无用的例子,但我想实现这个功能。

1 个答案:

答案 0 :(得分:2)

您可以使用productElement

按索引访问元组
val t = (1, 2, 3)
t.productElement(0) == t._1

以下是scala.Product3的实现:

override def productElement(n: Int) = n match {
   case 0 => _1
   case 1 => _2
   case 2 => _3
   case _ => throw new IndexOutOfBoundsException(n.toString())
}

因此,您应该按如下方式更新代码:

def doSomething(rdd: RDD[(Int, Int, Int)], col: Int) = {
    for(i <- 0 until col) {
        val count = rdd.map(f => f.productElement(i)).count //this is how you use 'i' 
    }
}