【问题标题】:Scala group on named Tuple to get min value命名元组上的 Scala 组以获取最小值
【发布时间】:2020-10-05 05:49:18
【问题描述】:

我有一个命名元组的序列如下:

Seq[GeoDetails] 其中 GeoDetails 的类型为 GeoDetails(geo_name: String, first_geo_time: Long)

在序列中,单个 Geo 可以有多个记录,我想编写一个函数到 geo_name 上的 Group by,并为 first_geo_time 取 MIN 值。例如

输入

Seq(GeoDetails("cn", 1111111111111L), GeoDetails("mx", 2222222222222L), GeoDetails("mx", 3333333333333L), GeoDetails("cn", 4444444444444L))

期望的输出

Seq(GeoDetails("cn", 1111111111111L), GeoDetails("mx", 2222222222222L))

我认为使用 groupBy 和 foldLeft 可以完成这项工作,但我是 Scala 新手,希望能得到一些帮助。我想在维护案例类的情况下获得输出

【问题讨论】:

  • 只使用 Scala 或者你的问题是如何在 Spark 中做到这一点?
  • .groupBy(_.geo_name).values.map(_.minBy(_.first_geo_time))
  • 我正在尝试在用 Scala 编写的 Spark 流中进行操作。这是 group by 语句中生成的列之一。

标签: scala apache-spark


【解决方案1】:

类似(Scala 2.13):

 val list = Seq(GeoDetails("cn", 1111111111111L), GeoDetails("mx", 2222222222222L), GeoDetails("mx", 3333333333333L), GeoDetails("cn", 4444444444444L))

 list.groupBy(_.geo_name).view.mapValues(el => el.sortBy(_.first_geo_time).head).toList

【讨论】:

猜你喜欢
  • 2012-09-17
  • 2017-12-05
  • 2015-12-22
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
相关资源
最近更新 更多