如何使用Spark在一步中迭代生成不同结果的大量文件?例如:
val tweets : RDD[Tweet] = ...
val topWords : RDD[String] = getTopWords(tweets)
val topHashtags : RDD[String] = getTopHashtags(tweets)
topWords.collect().foreach(println)
topHashtags.collect().foreach(println)
看起来Spark会在tweets数据集上迭代两次。有什么方法可以防止这种情况吗? Spark是否足够聪明以进行这种优化?
提前致谢,
答案 0 :(得分:3)
Spark会尽可能地将数据加载到CPU缓存中,但这不是你应该依赖的东西,所以你最好的选择是tweets.cache
以便在初始加载之后它会正在处理内存存储。您将拥有的唯一解决方案是组合您的两个函数并返回(resultType1, resultType2)