Spark在shuffle之前存储中间结果/分区的位置

时间:2016-02-11 20:35:32

标签: caching apache-spark

假设我有一个包含10个执行程序的集群。我有一个如下代码:

val tokenized = sc.textFile(args(0)).flatMap(_.split(' ')).map((_, 1))
val wordCounts = tokenized.reduceByKey(_ + _)

文件非常大 - 比集群的总mem高。说,我设置了分区号100,所以每个分区都可以在exec中加载,我有100个任务在加载和flatmap。我的问题是存储了标记化的rdd / partition(存储的中间结果), - 我没有使用cache()?我认为火花会将分区溢出到磁盘中。在这种情况下,具有缓存的代码有什么不同?

val tokenized = sc.textFile(args(0)).flatMap(_.split(' ')).map((_, 1)).cache() 
val wordCounts = tokenized.reduceByKey(_ + _)

即使我缓存了这个标记化的rdd,火花仍然会洗牌吗?

1 个答案:

答案 0 :(得分:0)

  

我认为spark会将分区溢出到磁盘中。

那是对的。如果需要,Spark会将数据存储在本地文件系统中。

  

缓存的不同(...)是什么?

不多。缓存不会影响第一次执行。它只会尝试存储数据,以便以后可以重复使用。

  

即使我缓存了这个标记化的rdd,火花仍然会洗牌吗?

是的,它会的。缓存不会替换混乱,虽然缓存可以在这里过时,因为shuffle会自动缓存临时文件。

相关问题