来自单个键的多个键值对,使用 Spark 转换函数的值

Multiple key value pairs from a single key,value using Spark Transformation functions

我有一个格式如下的 RDD:

scala> user_freq_movie
res0: org.apache.spark.rdd.RDD[(Int, List[Int])] = ShuffledRDD[23]

其中一个元素的格式如下:

//(userID,List(freqMovies):
scala> user_freq_movie.first
res1: (Int, List[Int]) = (1,List(102, 101, 98, 100))`

我希望对上面的内容生成一个新的 RDD 转换,以便将键值对作为用户 ID 和对,例如:

1,(102,101)
1,(102,98)
1,(102,98)
1,(101,98)

我目前可以使用组合功能生成所有对,但我错过了它们来自的用户。如何解决火花中的这个挑战? 我正在使用以下转换从 RDD 生成所有对:

val allpairs= user_freq_movie.flatMap(line=>line._2.combinations(2).toSeq)
  .map(_.sorted).map(line=>line.toTuple2)

使用flatMapValues:

user_freq_movie.flatMapValues(line=>line._2.combinations(2))