我有2个RDD,每个都从不同类型的日志文件中读取,这些日志文件有一些共同的数据。因此,我们有类型为EventA的RDD和类型为EventB的RDD,其中类EventA和EventB继承自Event。
使用与EventA类型的RDD相关的不同事件获取EventB类型的RDD的最佳方法是什么?
逻辑上,如果我在" set theory"中提出问题,我对集合的补充感兴趣:RDD [EventB]∖RDD [EventA]。我打算使用Event中定义的equals方法来推断哪些事件是相同的。
答案 0 :(得分:14)
我认为您需要subtract
或者重要数据是否在密钥subtractByKey
中。
基本用法:
rdd.subtractByKey(otherRdd)
当第一个RDD较小时,此操作效率更高,因为第一个RDD可以保留在内存中,而第二个RDD可以流式传输。根据您的问题,如果您想要A that isn't in B
或everything that isn't in the intersection of A and B
中的所有内容,则不清楚。因此,第二种方法的解决方案是将两个减法的结果结合起来:
val newRdd = rdd.subtractByKey(otherRdd).union(otherRdd.subtractByKey(rdd))