Scala 如何从列表[Map[String,String]]中提取字段的最频繁值
我有这些数据:Scala 如何从列表[Map[String,String]]中提取字段的最频繁值,scala,apache-spark,Scala,Apache Spark,我有这些数据: val data = List(Map(event_id -> ABC, event_name -> visited, timestamp -> 1478187513, member_id -> 111, category -> web, field1 -> abc), Map(event_id -> DEF, event_name -> added, timestamp -> 1478187520, member
val data = List(Map(event_id -> ABC, event_name -> visited, timestamp -> 1478187513, member_id -> 111, category -> web, field1 -> abc),
Map(event_id -> DEF, event_name -> added, timestamp -> 1478187520, member_id -> 111),
Map(event_id -> ABC, event_name -> visited, timestamp -> 1478187522, member_id -> 111, category -> web, field1 -> abc),
Map(event_id -> ABC, timestamp -> 1478187618, member_id -> 111, category -> web, field1 -> abc))
我想提取最频繁的事件名称
。在这种情况下,应该访问
。但是,必须考虑的是,并非所有列表
的条目都有事件名称
字段。我怎么做
如果我只需要提取任何事件名称
,那么这就行了。但它并没有给我最常见的一个:
val event_name = data.collect{
case map if map.keySet.contains("event_name") => map("event_name")
}.headOption.getOrElse("")
我还编写了这段代码,但它并不认为某些条目可能没有事件名称
:
val event_name = data.map(l=>l("event_name")).groupBy(identity).maxBy(_._2.size)._1
试试
data.flatMap(u.get(“事件名称”))
@ukasz:你是这个意思吗<代码>数据.flatMap(u.get(“事件名称”)).groupBy(identity).maxBy(u.u 2.size)。1是的,这正是我的意思。您已接近解决方案:)