【发布时间】:2018-08-27 01:39:41
【问题描述】:
一个
首先我阅读了一条推文并通过映射到我的解析函数parseTweet解析成一个推文案例类:
val tweets = sc.textFile("/home/gakuo/Documents/bigdata/NintendoTweets").map(parseTweet)
两个
然后我使用一个函数对 RDD 进行配对,通过 toPairRdd 中的映射生成 (hashtags, likes) 形式的对 RDD:
val pairedRDD = toPairRdd(tweets).persist()
问题
在阅读了我在上面 (one) 中的 RDD 之后,是否有助于坚持它,因为 (two) 中的后续内容是一种转换?我在想,既然都懒,那么坚持其实就是浪费内存。
三个
计算pairRDD后,我想计算每个主题标签的分数:toScores uses reduceByKey
val scores = toScores(pairedRDD).persist()
问题
我使用reduceByKey。这个 pairRDD 方法会导致洗牌吗?我读过一篇论文,上面写着:
“当生成的 RDD 依赖于来自相同 RDD 或另一个 RDD 的其他元素时,可能会发生 shuffle。 cogroup,groupWith,加入,leftOuterJoin,rightOuterJoin, groupByKey,reduceByKey,combineByKey,distinct,交集, 重新分区,合并导致洗牌。为避免此类操作的混洗,请确保转换遵循与原始 RDD 相同的分区"
同一篇论文还指出reduceByKey 遵循与原始 RDD 相同的分区。
【问题讨论】:
-
保存数据时,重要的是在转换后的数据帧上执行的操作数。也许这可以帮助回答您的问题:stackoverflow.com/questions/28981359/…
标签: scala apache-spark