当前位置: 首页 > 知识库问答 >
问题:

使用非相等键的自定义联接

令狐烨烨
2023-03-14

我需要实现一个自定义的连接策略,这将匹配非严格平等的关键。举例来说,我们可以考虑距离:当键足够近时,应该发生连接(尽管在我的例子中,它比距离度量稍微复杂一点)

因此,我不能通过重写equals来实现这一点,因为没有相等性(我需要为其他需求保留一个真正的相等性测试)。我想我还需要实现一个合适的分割器。

我怎么能那么做?

共有2个答案

慕容高卓
2023-03-14

一种方法是取两个RDD的笛卡尔乘积,过滤掉不满足条件的元素。使用距离示例:

rdd1.cartesian(rdd2).filter{case (elem1, elem2) => distance(elem1,elem2) < threshold}

这是一个开销很大的操作,如果一个数据集足够小,可以对其进行优化,在这种情况下,可以通过广播来执行地图端连接。

何灼光
2023-03-14

将rdd转换为数据帧,然后可以像这样进行连接:

val newDF = leftDF.join(rightDF, $"col1" < ceilingVal and $"col1" > floorVal)

然后,您可以定义可以在联接中使用的UDF。所以,如果你有这样的“distanceUDF”:

val distanceUDF = udf[Int, Int, Int]((val1, val2) => val2 - val1)

然后你可以做:

val newDF = leftDF.join(rightDF, distanceUDF($"left.colX", $"right.colY") < 10)
 类似资料:
  • 我们正在评估Activiti作为一个流程引擎,以取代我们现有的本土工作流引擎。Activiti的功能给我们留下了深刻的印象,特别是与多租户和REST WS相关的功能。 我想这种情况会很常见,其他人也会面临同样的情况。 我知道我在这个问题上很含糊,但在这个阶段,我没有具体的问题可以讨论。

  • 我想使用hasMany与原始sql外键和本地键之间的关系。我必须根据日期来关联它们,这就是为什么我必须使用原始sql函数作为外键和本地键。 我试图定制hasMany关系,但没有成功。 这有可能吗?

  • 问题内容: 在Swift 2.3中,我使用以下代码在自定义相机中拍照: 但是他的话: 显示此错误: 类型“ AVCapturePhotoOutput”的值没有成员“ captureStillImageAsynchronouslyFromConnection” 我尝试解决问题,但是我总是收到越来越多的错误,所以这就是我发布原始代码的原因。 有人知道如何使我的代码再次起作用吗? 谢谢。 问题答案: 多

  • 问题内容: 新的ES 6(和谐)引入了新的Set对象。Set使用的身份算法类似于运算符,因此不太适合比较对象: 如何自定义Set对象的相等性以进行深层对象比较?有没有像Java一样的东西? 问题答案: ES6 对象没有任何比较方法或自定义比较可扩展性。 的,而方法只关闭它是一个基本相同的实际物体或相同的值,没有办法插头插入或更换只是逻辑。 你大概可以从派生您自己的对象和替换,并与一些做了深刻的对象

  • 问题内容: 是否有任何已知的组合上,将给予一个民垫键盘有特殊字符如,,和。我试图允许用户输入一个数字,并且该字段也可以采用上述字符。我尝试了很多,但似乎都没有提供所需的输出。 为此,我需要创建自己的自定义键盘吗?由于我的要求非常特定于某些特殊字符,请不要将此问题标记为重复的问题。提前致谢。 问题答案: 您可以根据需要使用KeyboardView进行自定义。 其中 R.xml.customLayou

  • 上面是基本的操作,下面看点高效的使用:自定义快捷键 查看快捷键 菜单view里找 Command Palette项 view -> Command Palette(调色板) 对应的快捷键是shift + command + p 敲完后,输入tri 修改快捷键 但是CTRL+SPACE在我的电脑里已经占用了,所以还是需要修改一下的,见下图 打开快捷键配置 修改如下 即把 // Place your