Spark - 基于用户id出现的子集数据集

时间:2017-03-17 18:21:26

标签: scala apache-spark filter

我想过滤数据集,只保留在数据集中至少出现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)))

1 个答案:

答案 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))