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
感謝您的建議。我有點猜測這是創建結果的最佳邏輯,但如果有其他解決方案 - 不使用笛卡爾函數的解決方案 - 我會很樂意瞭解它們。並不是數據集太大,而是在兩個數據集上進行「連接」都需要很長時間。 –