spark-scala:如果另一个RDD中不存在RDD的记录,则过滤RDD

add*_*ons 5 scala apache-spark

我有一个RDD,其结构如下:

((user_id,item_id,rating))
Run Code Online (Sandbox Code Playgroud)

我们称这个RDD为训练

然后还有另一个具有相同结构的rdd:

((user_id,item_id,rating))
Run Code Online (Sandbox Code Playgroud)

这个rdd作为测试

我想确保测试中的数据不会出现在每个用户的列车中.所以我们说吧

train = {u1,item2: u1,item4 : u1,item3} test={u1,item2:u1, item5}
Run Code Online (Sandbox Code Playgroud)

我想确保从u1训练数据中删除item2.

所以我开始做的是groupBy rdd(s)(user_id,item_id)

 val groupedTrainData = trainData.groupBy(x => (x._1, x._2))
Run Code Online (Sandbox Code Playgroud)

但我觉得这不是要走的路.

Dan*_*bos 3

你需要PairRDDFunctions.subtractByKey

def cleanTrain(
  train: RDD[((user, item), rating)],
  test: RDD[((user, item), rating)]) =
  train.subtractByKey(test)
Run Code Online (Sandbox Code Playgroud)