如何从List [Map [String,String]]中提取字段中最常用的值

时间:2017-01-25 18:42:19

标签: 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_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))

我想提取最频繁的event_name。在这种情况下,它应该是visited。但是,必须考虑到List的所有条目都不具有字段event_name。我该怎么办?

如果我需要提取任何event_name,那么这是有效的。但它并没有给我最常见的一个:

val event_name = data.collect{
    case map if map.keySet.contains("event_name") => map("event_name")
}.headOption.getOrElse("")

我也编写了这段代码,但并不认为某些条目可能没有event_name

val event_name = data.map(l=>l("event_name")).groupBy(identity).maxBy(_._2.size)._1

0 个答案:

没有答案