是否可以使用某些“自定义条件”/模糊匹配来加入两个(Pair)RDD
s(或Dataset
s / DataFrame
s(在多个字段上),例如数字或日期的范围/间隔和各种“距离方法”,例如Levenshtein,字符串?
要在RDD
中“分组”以获得PairRDD
,可以实现PairFunction
,但在加入两个RDD
时似乎无法实现类似的功能s /数据集?我想的是:
rdd1.join(rdd2, myCustomJoinFunction);
我正在考虑在hashCode()
和equals()
中实施自定义逻辑,但我不确定如何将“类似”数据放在同一个存储桶中。我也一直在研究RDD.cogroup()
,但还没弄清楚如何用它来实现它。
我刚遇到elasticsearc-hadoop。有谁知道这个库是否可以用来做这样的事情?
我正在使用Apache Spark 2.0.0。我在Java中实现,但Scala中的答案也非常有用。
PS。这是我的第一个Stackoverflow问题,如果我犯了一些新手的错误,请耐心等待:)。
答案 0 :(得分:0)
对于DataFrames / Datasets,您可以使用自定义连接功能的连接。创建一个将使用DataFrame中的列的UDF,就像在这个问题in first answer中一样。
您也可以
rdd1.cartesian(rdd2).filter (...)
请记住,它会花费很多时间来计算