我有一个包含这样的元组的RDD
(A,List(2,5,6,7))
(B,List(2,8,9,10))
我希望获得第一个元素的索引,其中值和索引之间的特定条件成立。 到目前为止,我已经在单个元组测试中尝试了这个并且它工作正常:
test._2.zipWithIndex.indexWhere { case (v, i) => SOME_CONDITION}
我无法找到如何迭代列表中的所有元组..我试过了:
val result= test._._2.zipWithIndex.indexWhere { case (v, i) => SOME_CONDITION}
答案 0 :(得分:4)
首先,"迭代"这里是错误的概念 - 它来自命令式编程领域,您实际上自己迭代数据结构。 Spark使用一个功能范例,让你传递一个函数来处理RDD中的每个记录(使用一些高阶函数,如map
,foreach
...)。
在这种情况下,您希望将每个元素映射到新元素中。
要仅映射元组的右侧(不更改左侧),您可以使用mapValues
:
// mapValues will map the "values" (of type List[Int]) to new values (of type Int)
rdd.mapValues(list => list.zipWithIndex.indexWhere {
case (v, i) => someCondition(v, i)
})
或者,使用普通map
:
rdd.map {
case (key, list) => (key, list.zipWithIndex.indexWhere {
case (v, i) => someCondition(v, i)
})
}