使用非等号键自定义连接

mat*_*ieu 5 join apache-spark

我需要实现一个自定义连接策略,它将匹配非严格相等的键.为了说明,可以考虑距离:当键足够接近时应该进行连接(尽管在我的情况下,它比仅仅距离度量更复杂)

所以我不能通过重写equals来实现它,因为没有相等性(我需要为其他需求保持真正的相等性测试).我想我还需要实现一个合适的分区器.

我怎么能这样做?

Dav*_*fin 5

将RDD转换为DataFrames,然后您可以像这样进行连接:

val newDF = leftDF.join(rightDF, $"col1" < ceilingVal and $"col1" > floorVal)
Run Code Online (Sandbox Code Playgroud)

然后,您可以定义可在连接中使用的UDF.所以如果你有这样的"distanceUDF":

val distanceUDF = udf[Int, Int, Int]((val1, val2) => val2 - val1)
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

val newDF = leftDF.join(rightDF, distanceUDF($"left.colX", $"right.colY") < 10)
Run Code Online (Sandbox Code Playgroud)