首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择RDD1的特定元素

选择RDD1的特定元素
EN

Stack Overflow用户
提问于 2016-11-01 07:02:07
回答 1查看 47关注 0票数 1

我被一个特定的scala-spark语法卡住了,我希望您能引导我朝着正确的方向前进。

如果RDD1是数组类型(( Float,Float,Float),Long),

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

RDD2是索引,类型为ArrayLong,

RDD2.collect =数组(1,3,5...)

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

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

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2016-11-01 07:58:20

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

代码语言:javascript
复制
// 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 --它是一个相当丰富的应用程序接口,并且都使用RDD[(Key, Value)]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40351833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档