首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换RDDs中某些条件的数据,并过滤掉不需要的RDDs

替换RDDs中某些条件的数据,并过滤掉不需要的RDDs
EN

Stack Overflow用户
提问于 2017-11-13 15:00:28
回答 1查看 285关注 0票数 1

我有一个RDD,它看起来像这样:

代码语言:javascript
复制
[((String, String, String), (String, String))]

示例数据如下:

代码语言:javascript
复制
((10,1,a),(x,3))
((10,2,b),(y,5))
((11,2,b),
((11,3,c),(z,4))

因此,如果key中的第二个字符串的值是2或3,则将其替换为2-3,如果它是1,或者如果rdd类似于第三个,则删除该rdd。

因此,预期输出如下所示:

代码语言:javascript
复制
((10,2-3,b),(y,5))
((11,2-3,c),(z,4))
EN

回答 1

Stack Overflow用户

发布于 2017-11-13 16:15:18

给定输入数据为

代码语言:javascript
复制
val rdd = spark.sparkContext.parallelize(Seq(
  (("10","1","a"),("x","3")),
  (("10","2","b"),("y","5")),
  (("11","2","b"),()),
  (("11","3","c"),("z","4"))
))

您可以执行以下操作来获得所需的输出,如

代码语言:javascript
复制
rdd.filter(x => x._1._2 != "1").filter(x => x._2 != ()).map(x => {
  if(x._1._2 == "2" || x._1._2 == "3") ((x._1._1, "2-3", x._1._3), x._2)
  else ((x._1._1, x._1._2, x._1._3), x._2)
})

您的输出将是

代码语言:javascript
复制
((10,2-3,b),(y,5))
((11,2-3,c),(z,4))

感谢philantrovert指出它必须是String而不是Int

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

https://stackoverflow.com/questions/47258682

复制
相关文章

相似问题

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