我有一个带有如下元素数组的RDD,每个元素都可以被视为元组,现在问题是我只想从前两个元组中访问第4个元素..并循环遍历此RDD
Array[(Int, String, String, Int)] = Array(
(1,Tom,AAA,2000), (2,Tim,AAA,3000),
(3,Mark,BBB,6000), (4,Jim,BBB,6000), (5,James,CCC,4000))
我想首先采取tuple1第4个元素(2000)和tuple2第4个元素(3000) 运行一些条件然后做同样但现在为元组2和元组3 ..基本循环通过RDD ..
我可以在Scala中编写for循环和if语句,但由于RDD不允许参数,因此我不了解在RDD之上执行此操作的人。
感谢并感谢任何帮助。我是新来的,所以还在学习。
答案 0 :(得分:3)
如何根据索引
访问Spark RDD元素数组
答案是不要试试。 RDD未编入索引,并且取决于值的上下文顺序可能是不确定的。
据我所知,你想要的只是一个map
和滑动窗口:
import org.apache.spark.mllib.rdd.RDDFunctions._
// A dummy function
def doSomething(xs: Array[Int]) = xs match {
case Array(x1, x2) => if (x1 <= x2) x1 else x2
}
val rdd = sc.parallelize(Array(
(1, "Tom", "AAA", 2000),
(2, "Tim", "AAA", 3000),
(3, "Mark", "BBB", 6000),
(4, "Jim", "BBB", 6000),
(5, "James", "CCC", 4000)))
rdd.map(_._4).sliding(2).map(doSomething)
当然,上面假定值的顺序是定义的,或者换句话说,祖先沿袭并不包括改组的RDD。