Scala 如何使用Spark以增量方式将元素分组在一起

Scala 如何使用Spark以增量方式将元素分组在一起,scala,apache-spark,grouping,spark-streaming,Scala,Apache Spark,Grouping,Spark Streaming,我想要一些关于如何解决从队列中获取的项目分组问题的建议。我将尽量通过删除所有不必要的细节来简化问题。 我的元素的特征是坐标< /强>和 > < >,我想先按距离对它们进行分组,然后,对于属于同一组的元素,我想对名称进行评估,并考虑具有相同(不仅相同)名称的元素,属于同一组,否则,我将创建一个新组 让我们举个例子 元素以x和y作为坐标和名称,所以我可以将元素写成E(x,y,name)。 阈值距离等于1 排队 理想情况下,程序如下: 我从队列中取第一个元素(E0),没有比较,我将它放在笛卡尔平面上

我想要一些关于如何解决从队列中获取的项目分组问题的建议。我将尽量通过删除所有不必要的细节来简化问题。
我的元素的特征是<强>坐标< /强>和<强> > < <强> >,我想先按距离对它们进行分组,然后,对于属于同一组的元素,我想对名称进行评估,并考虑具有相同(不仅相同)名称的元素,属于同一组,否则,我将创建一个新组

让我们举个例子

元素以x和y作为坐标和名称,所以我可以将元素写成E(x,y,name)。 阈值距离等于1

排队

理想情况下,程序如下:
我从队列中取第一个元素(E0),没有比较,我将它放在笛卡尔平面上,并将其分配给组G1。
我取第二个元素(E1),我计算与第一个元素(E0)的距离,它在阈值范围内,我查看名称,它完全不同,我将其分配为G2组。
我取第三个元素(E2),与其他两个元素(E0,E1)的距离超出范围,我忽略名称并分配组G3。
我选择第四个元素(E3),因为它可能同时属于G1和G2,但我通过观察名称的相似性将其分配给G2

从图形上看,最终结果如下:


我正在考虑使用Spark Streaming来实现这一点。

我将使用Spark结构化流和Spark ML中的LSH。即使您可以使用自己的转换器来计算距离。
End of the queue -> E3(1.5,1.5,same), E2(-1,-1,same), E1(2,2,some), E0(2,1,different) -> Beginning of the queue