Join 带Spark的多列模糊连接

Join 带Spark的多列模糊连接,join,apache-spark,apache-spark-mllib,fuzzy,Join,Apache Spark,Apache Spark Mllib,Fuzzy,我有两个Spark RDD,没有需要加入的公共密钥 第一个RDD来自cassandra表a,表a包含项目的参考集(id、项目名称、项目类型、项目大小),例如:(1,‘项目1’、‘类型a’、20)。 第二个RDD每晚从另一个系统导入,它包含大致相同的数据,没有id,并且是原始形式(原始项目名称、原始类型、原始项目大小),例如('item 1'、'type a',20) 现在,我需要基于数据的相似性来连接这两个RDD。好的,我知道RDD的大小大约是10000个,但在将来它会长大 我的实际解决方案是:

我有两个Spark RDD,没有需要加入的公共密钥

第一个RDD来自cassandra表a,表a包含项目的参考集(id、项目名称、项目类型、项目大小),例如:(1,‘项目1’、‘类型a’、20)。 第二个RDD每晚从另一个系统导入,它包含大致相同的数据,没有id,并且是原始形式(原始项目名称、原始类型、原始项目大小),例如('item 1'、'type a',20)

现在,我需要基于数据的相似性来连接这两个RDD。好的,我知道RDD的大小大约是10000个,但在将来它会长大

我的实际解决方案是:两个RDD的笛卡尔连接,然后计算每行的ref和raw属性之间的距离,然后按id分组并选择最佳匹配

在这种规模的RDD上,这个解决方案是可行的,但我担心在未来笛卡尔连接可能会太大

什么是更好的解决方案?
我试图查看Spark MLlib,但不知道从何处开始,使用哪种算法等。任何建议都将不胜感激。

您能否将原始列预处理为“非原始”类型?i、 e.“第1项”->“第1项”?如果这是不可行的(例如,原始类型是完全随机的),那么某种对位置敏感的散列可能会起作用?这个想法是散列你的值,这样类似的值就会被放在相同的存储桶中(你实际上想要冲突)。我会对每个原始字段进行预处理,在很多情况下,它是不够的,并且找不到精确的匹配。尽管这是一个有趣的问题,但它确实不适合这样做。这里没有实际的编程问题,尤其不是一个可以用几个段落和几行代码来解决的问题。我的建议是先做些研究。