【问题标题】:How to access Spark RDD Array of elements based on index如何根据索引访问 Spark RDD 元素数组
【发布时间】:2015-11-08 20:16:48
【问题描述】:

我有一个包含如下元素数组的 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 之上由谁来执行。

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

【问题讨论】:

    标签: arrays scala apache-spark


    【解决方案1】:

    如何根据索引访问 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 2012-08-29
      • 2017-11-05
      • 1970-01-01
      • 2019-07-28
      • 2019-07-26
      相关资源
      最近更新 更多