Apache Spark:使用自定义条件/模糊匹配来加入RDD(数据集)

时间:2016-09-01 12:18:11

标签: java apache-spark levenshtein-distance fuzzy-comparison elasticsearch-hadoop

是否可以使用某些“自定义条件”/模糊匹配来加入两个(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问题,如果我犯了一些新手的错误,请耐心等待:)。

1 个答案:

答案 0 :(得分:0)

对于DataFrames / Datasets,您可以使用自定义连接功能的连接。创建一个将使用DataFrame中的列的UDF,就像在这个问题in first answer中一样。

您也可以

rdd1.cartesian(rdd2).filter (...)

请记住,它会花费很多时间来计算