【问题标题】:Iterate columns in RDD迭代 RDD 中的列
【发布时间】:2014-11-20 03:32:22
【问题描述】:
我正在研究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?
}
}
虽然这是一个无用的例子,但我想实现这个功能。
【问题讨论】:
标签:
scala
apache-spark
rdd
【解决方案1】:
您可以使用 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'
}
}