我有以下数据:
val RDDApp = sc.parallelize(List("A", "B", "C"))
val RDDUser = sc.parallelize(List(1, 2, 3))
val RDDInstalled = sc.parallelize(List((1, "A"), (1, "B"), (2, "B"), (2, "C"), (3, "A"))).groupByKey
val RDDCart = RDDUser.cartesian(RDDApp)
我想映射这些数据,以便我有一个元组的RDD(userId,如果为用户提供了字母,则为Boolean)。我以为我找到了一个解决方案:
val results = RDDCart.map (entry =>
(entry._1, RDDInstalled.lookup(entry._1).contains(entry._2))
)
如果我致电results.first
,我会获得org.apache.spark.SparkException: SPARK-5063
。我在Mapping函数中看到了Action的问题,但是我不知道如何解决它以便得到相同的结果。
答案 0 :(得分:1)
只需join
和mapValues
:
RDDCart.join(RDDInstalled).mapValues{case (x, xs) => xs.toSeq.contains(x)}