我只在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]
实际上有什么意义吗?
答案 0 :(得分:3)
我想知道Spark是否仍在使用Shuffle,尽管它并不是并行运行的。
是的。值得注意的是,即使单核心数量的分区可能比一个大得多。例如,如果使用SparkContext.textFile
创建RDD,则分区数取决于文件系统块的大小。
我应该假设,在reduceByKey之前使用了Shuffle
不,shuffle是reduceByKey
逻辑的基本部分,因此它在reduceByKey
期间使用,而不是之前使用。稍微简化一些事情shuffle
相当于创建一个哈希表。假设只有一个分区,它不会执行任何有用的任务,但仍然存在。
[10]确实有任何意义吗?
对于给定的RDD,它是唯一的(在当前SparkContext
)ID中。例如,如果RDD保持不变,那么您看到的数字应该是SparkContext.getPersistentRDDs
中的关键字。