Spark:随机并行的洗牌= 1

时间:2015-12-13 22:46:00

标签: apache-spark rdd

我只在Spark的一个节点上运行Parallelism = 1,以便将其性能与单线程应用程序进行比较。我想知道Spark是否仍在使用Shuffle,尽管它不是并行运行的。如果是,例如执行以下命令:

val counts = text_file.flatMap(line => line.split(" "))
   .map(word => (word, 1))
   .reduceByKey(_+_)

我从Spark Interactive Scala Shell获得以下输出:

counts: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[10] 
                                                  at reduceByKey at <console>:41

我应该假设在Shuffle之前使用了reduceByKey[10]实际上有什么意义吗?

1 个答案:

答案 0 :(得分:3)

  

我想知道Spark是否仍在使用Shuffle,尽管它并不是并行运行的。

是的。值得注意的是,即使单核心数量的分区可能比一个大得多。例如,如果使用SparkContext.textFile创建RDD,则分区数取决于文件系统块的大小。

  

我应该假设,在reduceByKey之前使用了Shuffle

不,shuffle是reduceByKey逻辑的基本部分,因此它在reduceByKey期间使用,而不是之前使用。稍微简化一些事情shuffle相当于创建一个哈希表。假设只有一个分区,它不会执行任何有用的任务,但仍然存在。

  

[10]确实有任何意义吗?

对于给定的RDD,它是唯一的(在当前SparkContext)ID中。例如,如果RDD保持不变,那么您看到的数字应该是SparkContext.getPersistentRDDs中的关键字。