计算子列表列表中的唯一值

时间:2016-08-24 10:42:44

标签: scala apache-spark

我有以下结构的RDD(RDD[(String,Map[String,List[Product with Serializable]])]):

这是一个示例数据:

(600,Map(base_data -> List((10:00 01-08-2016,600,111,1,1), (10:15 01-08-2016,615,111,1,5)), additional_data -> List((1,2)))
(601,Map(base_data -> List((10:01 01-08-2016,600,111,1,2), (10:02 01-08-2016,619,111,1,2), (10:01 01-08-2016,600,111,1,4)), additional_data -> List((5,6)))

我想计算子列表中第4个字段的唯一值的数量。 例如,让我们来看第一个条目。列表为List((10:00 01-08-2016,600,111,1,1), (10:15 01-08-2016,615,111,1,5))。它在子列表的第4个字段中包含2个唯一值(15)。

对于第二个条目,它还包含2个唯一值(24),因为2会重复两次。

生成的RDD格式应为RDD[Map[String,Any]]

我尝试按如下方式解决此问题:

val result = myRDD.map({
   line => Map(("id",line._1),                        
               ("unique_count",line._2.get("base_data").groupBy(l => l).count(_))))
})

但是这段代码不能满足我的需要。事实上,我不知道如何正确地表明我想要按第4场分组......

1 个答案:

答案 0 :(得分:0)

你非常接近解决方案。无需调用groupBy,但您可以按索引访问元组项,将生成的List转换为Set,然后返回{{1}的大小},它对应于唯一元素的数量:

Set