考虑以下情况,您有两个键值对的RDD,其中来自两个RDD的两个键中的每一个都是不同类型的。
RDD1(Vector [String],String)如下所示:
(Vector("A", "B", "E"), "bla bla bla"),
(Vector("W"), "bla bla bla bla"),
(Vector("C", "M"), "bla bla bla bla bla"),
(Vector("A", "V"), "bla bla bla")
...
RDD2 [(String,String)]如下所示:
("A", 12),
("B", 434),
("C", 8023),
("D", 3454),
...
("N", 251)
注意:RDD2中的键来自A-N(包括A-N)。
所需的输出是第一个RDD1的对,这样Vector键中的每个字符串都是RDD2的整个键集的子集
(Vector("A", "E", "B"), "bla bla bla"),
(Vector("C", "M"), "bla bla bla bla bla")
如果RDD无法做到这一点,我想知道像dataframe和dataset这样的其他抽象如何实现这个结果
答案 0 :(得分:0)
def myFilter(rdd1: RDD[(Vector[String],String)], rdd2: RDD[(String,String)]): RDD[(Vector[String],String)] = {
val keys = rdd2.map(_._1).collect()
val filtered = rdd1.filter{ entry =>
entry._1.forall(str => keys.contains(str))
}
filtered
}
这不是完成任务的最有效方法,但可以完成工作。