Apache Spark - 如何从两个 RDD 中获取不匹配的行
Posted
技术标签:
【中文标题】Apache Spark - 如何从两个 RDD 中获取不匹配的行【英文标题】:Apache Spark - how to get unmatched rows from two RDDs 【发布时间】:2015-07-01 11:01:30 【问题描述】:我有两个不同的 RDD,每个 RDD 都有一些公共字段,基于这些字段我想从 RDD1 或 RDD2 中获取不匹配的记录。[RDD1 中可用的记录但 RDD2 中不可用的记录] [RDD2 中可用但不可用的记录在 RDD1]
看来我们可以使用subtract
或subtractbyKey
。
示例输入:
**File 1:**
sam,23,cricket
alex,34,football
ann,21,football
**File 2:**
ruby,25,football,usa
alex,34,cricket,usa
ann,21,cricket,usa
**expected output:**
sam,23,cricket
更新:
目前我正在使用 Spark SQL 从 RDD 中获取不匹配的记录(编写查询以获取不匹配的记录)。
我正在寻找的是,我们是否可以使用 Spark Core 本身而不是使用 Spark SQL 来完成它,而且我没有查看代码,Spark Core 中是否有任何可用的操作?
请就此提出建议。
问候, 尚卡尔。
【问题讨论】:
一些例子?你试过什么了?还是您只是希望有人会为您编写代码? :) @SilverSkin 我更新了我的问题。感谢您的评论。 您能否添加一些示例数据和预期结果? @maasg 添加了示例数据.. 谢谢 【参考方案1】:您可以将两个 RDD 设置为相同的形状并使用 subtract
删除公共元素。
鉴于上面提到的file1
中的rdd1
和file2
中的rdd2
,您可以执行以下操作:
val userScore2 = rdd2.mapcase (name, score, sport, country) => (name, score, sport)
val in1andNotin2 = rdd1 subtract userScore2
val in2andNotIn1 = userScore2 subtract rdd1
【讨论】:
谢谢我知道了。我会尝试在 java API 上做同样的事情。以上是关于Apache Spark - 如何从两个 RDD 中获取不匹配的行的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Apache Spark 中的单个文件记录创建多个 RDD 行
使用 Scala 在 Apache Spark 中连接不同 RDD 的数据集
如何将 cassandraRow 转换为 Row(apache spark)?