如何根据索引

时间:2015-11-08 20:16:48

标签: arrays scala apache-spark

我有一个带有如下元素数组的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之上执行此操作的人。

感谢并感谢任何帮助。我是新来的,所以还在学习。

1 个答案:

答案 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。