我想过滤数据集,只保留在数据集中至少出现X次的用户行。在下面的示例中,我只想保留“id1”和“id2”的行。我怎样才能做到这一点?
case class UserValue(UserId: String, value: Double)
val values = sc.parallelize(Seq(UserValue("id1", 5.0),
Rating("id2", 4.0),
Rating("id2", 3.0),
Rating("id1", 2.0),
Rating("id3", 1.0)))
答案 0 :(得分:2)
您可以根据每个组的大小对UserBd,filter
进行分组,然后使用flatMap
将其转换回来:
values.groupBy(_.UserId).
filter{ case (k, v) => v.size >= 2 }.
flatMap{ case (k, v) => v }.collect
// res72: Array[UserValue] = Array(UserValue(id1,5.0), UserValue(id1,2.0), UserValue(id2,4.0), UserValue(id2,3.0))