0
,我有以下数据:星火表改造(错误:5063)
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与映射该数据(用户ID,布尔如果字母,给出了用户)。我以为我找到了一个解决方案:
val results = RDDCart.map (entry =>
(entry._1, RDDInstalled.lookup(entry._1).contains(entry._2))
)
如果我打电话results.first
,我得到org.apache.spark.SparkException: SPARK-5063
。我在Mapping函数中看到Action的问题,但不知道如何解决它,以便得到相同的结果。
是否有其他办法做到这一点,如果数据集是非常大的? –
我不确定我是否理解所有的逻辑。特别是笛卡儿需要创造'RDDCart'的气味。但是,如果两个数据集都不适合内存,那么单独加入可能是唯一有效的__exact__解决方案。 – zero323
感谢您的建议。我有点猜测这是创建结果的最佳逻辑,但如果有其他解决方案 - 不使用笛卡尔函数的解决方案 - 我会很乐意了解它们。并不是数据集太大,而是在两个数据集上进行“连接”都需要很长时间。 –