我有以下RDD:
JavaPairRDD<List<String>, String> firstRDD = ...
firstRDD.foreach(row -> System.out.println(row._1() + ", " + row._2()));
// [Man, Parent], Father
JavaPairRDD<List<String>, String> secondRDD = ...
secondRDD.foreach(row -> System.out.println(row._1() + ", " + row._2()));
// [Man, Parent, Father], Person
我想执行一个内部连接,如果左键在右键的子列表中(在前一个例子中, [Man, Parent]
在 [Man, Parent, Father]
).
有什么建议吗?
谢谢!
1条答案
按热度按时间a5g8bdjr1#
对于RDD(以及javapairrdds),连接操作只能检查完全匹配的键。
因此,我们必须将RDD转换为Dataframe:
对于连接条件,我们需要一个udf来检查一个数组是否是另一个数组的一部分。如果元素的顺序不重要,也可以使用array\u intersect。
把这两个元素放在一起
输入数据
我们得到
请注意,使用自定义项作为联接条件可能不是最快的选择。