卡桑德拉& Spark:如何避免笛卡尔积(Jaccard)

时间:2017-08-22 21:19:19

标签: apache-spark cassandra user-defined-functions

这是我的问题

我有两张桌子(10M和2500万行)。我想比较这两个表的地址。

我的解决方案是创建一个UDF(adress1,adress2)(使用Jaccard)

String joinSql = "SELECT "
                    + "a.name, a.firstame, Jaccard(a.adress1,b.adress2) as jaccard "
                    + "FROM tmp_tableA as a, tmp_tableB as b "
                    + "where (Jaccard(a.adress1,b.adress.2) > 0.8);


System.out.println(joinSql);
Dataset<Row> dfr = spark.sql(joinSql);

它有效,但需要很长时间。我该如何优化呢?

1 个答案:

答案 0 :(得分:1)

MinHashLSH可用于approxSimilarityJoins,大致相当于Jaccard距离。

您可以查看:

了解详情。

我对Efficient string matching in Apache Spark的回答显示了如何准备数据。