spark:map减少不同的值

时间:2016-08-02 09:20:14

标签: scala apache-spark

我是Scala Spark的初学者,我遇到了问题。

我有这样的地图(有数百万行):

Map("date_create1" -> "user_id1", "date_create1" -> "user_id2", "date_create1" -> "user_id1", "date_create2" -> "user_id1")

我想计算每个日期有多少不同的用户。

像这样:

Map("date_create1" -> 2, "date_create2" -> 1 )

我如何在Scala / Spark中执行此操作。 如果我使用aggregateByKey,我就不能有一个明显的不是吗?

非常感谢你的帮助

1 个答案:

答案 0 :(得分:4)

我假设你有一个像下面这样的元组。而你需要的是按日期获得不同的用户。您可以通过使用distinct和countByKey

轻松完成此操作
val data = Array(("date1","user1"),("date1","user1"),("date1","user3"),("date1","user2"),("date2","user1"),("date2","user2"),("date2","user2"))
val rdd = sc.parallelize(data)
val distincCount = rdd.distinct.countByKey()

输出:

distincCount: scala.collection.Map[String,Long] = Map(date2 -> 2, date1 -> 3)