2014-09-25 2 views
1

Я работаю над 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? 
    } 
} 

Хотя это бесполезный пример, но я хочу достичь этой функциональности.

ответ

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' 
    } 
} 
Смежные вопросы