是否可以在 Scala 中加入列表,类似于使用 Spark 或 Pandas 数据帧可以完成的操作。 例如,
val findMatch(hosts:List[Person], guests: List[Person]):List[(Person, Person)] = ??? \\ project, filter and join
目的是使用SELECT、JOIN、WHERE等动词在SQL行中指定Scala中合并集合的逻辑。
如果我的理解是正确的,可以使用 Spark,但是对于在线应用来说太慢了。但更重要的是,通过对列表进行连接,逻辑成为域级规范。
简短的回答是你没有那样的东西。您可以生成笛卡尔积并根据某些条件过滤不需要的内容
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 等数据库和工具存在的原因