Scala数据集中的最频繁值

时间:2020-06-13 17:38:35

标签: scala apache-spark

如何在scala数据集中的特定列中找到最频繁的值?

例如,如果其中一列是这样的:

西雅图
巴塞罗那
里斯本
巴塞罗那
蒙特利尔
巴塞罗那
里斯本

结果我将需要获取“巴塞罗那”。

2 个答案:

答案 0 :(得分:1)

如果您正在寻找基于Spark的解决方案,则与Jack Koenig's answer类似,只是使用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)

答案 1 :(得分:0)

将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