我有以下结构的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个唯一值(1
和5
)。
对于第二个条目,它还包含2个唯一值(2
和4
),因为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场分组......
答案 0 :(得分:0)
你非常接近解决方案。无需调用groupBy
,但您可以按索引访问元组项,将生成的List
转换为Set
,然后返回{{1}的大小},它对应于唯一元素的数量:
Set