【问题标题】:Selecting specific elements of an RDD1选择 RDD1 的特定元素
【发布时间】:2017-03-14 02:32:36
【问题描述】:

我被一个特定的 scala-spark 语法困住了,我希望你能引导我走向正确的方向。

如果 RDD1 是 Array[((Float, Float, Float), Long)] 类型,

RDD1.collect = Array((x1,y1,z1),1), ((x2,y2,z2),2), ((x3,y3,y3),3), ...)

RDD2 是索引,类型为 Array[Long],

RDD2.collect = Array(1, 3, 5...)

从 RDD1 中提取其索引出现在 RDD2 中的值的最佳方法是什么。 IE, 输出,Array((x1,y1,z1),1), ((x3,y3,y3),3),(x5,y5,y5),5) ...)

RDD1 和 RDD2 都足够大,我想避免使用 .collect。否则,问题只是在 2 个 scala 数组/列表中找到相交的元素。

非常感谢您的帮助!

【问题讨论】:

    标签: scala apache-spark rdd


    【解决方案1】:

    PairRDD 上有一个join 函数,这里就是你要使用的。

    // coming in, we have:
    // rdd1: RDD[((Float, Float, Float), Long)]
    // rdd2: RDD[Long]
    
    val joinReadyRDD1 = rdd1.map { case (values, key) => (key, values) }
    val joinReadyRDD2 = rdd1.map { key => (key, ()) }
    val joined = joinReadyRDD1.join(joinReadyRDD2).mapValues(_._1)
    

    这会返回一个RDD[(Long, (Float, Float, Float))],其中Long 键出现在rdd2

    附注:如果您有概念上的“键”和“值”,请将键放在首位。看看我在上面链接的 PairRDDFunctions——它是一个相当丰富的 API,并且都使用了RDD[(Key, Value)]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      相关资源
      最近更新 更多