Scala中的Join函数

x8diyxa7  于 2023-05-07  发布在  Scala
关注(0)|答案(1)|浏览(161)

是否可以在Scala中连接列表,类似于使用Spark或Pandas Dataframe 所做的事情。比如说

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

目的是在SQL行上使用SELECT、JOIN、WHERE和其他动词指定Scala中合并集合的逻辑。
如果我的理解是正确的,人们可以使用Spark,但它对于在线应用程序来说太慢了。但更重要的是,通过在列表上进行连接,逻辑变成了域级别的规范。

whlutmcx

whlutmcx1#

简短的回答是你没有这样的东西。你可以生成一个笛卡尔积,并根据某些条件过滤掉你不需要的东西

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这样的工具存在的原因

相关问题