Scala 中的连接函数

问题描述 投票:0回答:1

是否可以在 Scala 中加入列表,类似于使用 Spark 或 Pandas 数据帧可以完成的操作。 例如,

val findMatch(hosts:List[Person], guests: List[Person]):List[(Person, Person)] = ??? \\ project, filter and join 

目的是使用SELECT、JOIN、WHERE等动词在SQL行中指定Scala中合并集合的逻辑。

如果我的理解是正确的,可以使用 Spark,但是对于在线应用来说太慢了。但更重要的是,通过对列表进行连接,逻辑成为域级规范。

scala apache-spark domain-driven-design
1个回答
0
投票

简短的回答是你没有那样的东西。您可以生成笛卡尔积并根据某些条件过滤不需要的内容

def join[A,B](left:List[A], right: List[B])(f: (A,B) => Boolean):List[(A,B)] =
  for {
    l <- left
    r <- right if(f(l,r))
  } yield (l,r)

它可以在集合很小的时候起作用。该操作的复杂性是

O(n * m)
,其中
m
是第一个集合的大小,
m
是第二个集合的大小。

您可以尝试将

foldLeft
与一些使用字典的累加器结合使用,在这里您可以降低时间复杂度,增加空间复杂度。也许尝试用树做点什么,你必须根据自己的需要进行权衡。

我不认为您可以仅使用简单的集合轻松地进行 sql 连接。这就是 spark 或 pandas 等数据库和工具存在的原因

© www.soinside.com 2019 - 2024. All rights reserved.