ApacheSpark—scala中数据集中最常见的值

m2xkgtsf  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(330)

如何在scala中的数据集中的特定列中找到最频繁的值?
例如,如果其中一列如下所示:
西雅图
巴塞罗那
里斯本
巴塞罗那
蒙特利尔
巴塞罗那
里斯本
我需要得到“巴塞罗那”作为结果。

ds97pgxw

ds97pgxw1#

把c.s.reddy的评论变成一个完整的答案:
scastie链接:https://scastie.scala-lang.org/5gignmjgtucvdyrsba33eg

val xs = List(
  "Seattle",
  "Barcelona",
  "Lisbon",
  "Barcelona",
  "Montreal",
  "Barcelona",
  "Lisbon"
)

val result = 
  xs.groupBy(x => x)
    .map { case (k, v) => k -> v.size }
    .maxBy(_._2)
    ._1

println(result)
// Barcelona
k3fezbri

k3fezbri2#

如果您正在寻找基于spark的解决方案,这与jack koenig的答案相同,但使用spark函数而不是scala函数:

val df = List(
  "Seattle",
  "Barcelona",
  "Lisbon",
  "Barcelona",
  "Montreal",
  "Barcelona",
  "Lisbon"
).toDF("city")

val max = df
  .groupBy("city")
  .count()
  .sort(desc("count"))
  .head()
  .getString(0)

相关问题