在spark上,某些操作在定义操作之前正在执行?

时间:2017-02-21 11:23:16

标签: apache-spark rdd

我有以下火花简单示例:

#1 val lines: RDD[String] = sc.textFile("/data/non_existing_file.txt")
#2 val words: RDD[String] = lines.flatMap(line => line.split(" "))
#3 val pairs: RDD[(String, Int)] = words.map(word => (word, 1))
#4 val counts: RDD[(String, Int)] = pairs.reduceByKey(_ + _)
#5 counts.saveAsTextFile("/tmp/result")

当我运行程序时,我会按预期获得异常Input path does not exist: file:/data/non_existing_file.txt"

什么是ackward是我在第4行得到这个例外。我知道我在第1行,第2行和第3行都没有收到此错误,因为计算尚未执行。 当我有将结果写入文件的操作时,计算仅在第5行执行。那么,为什么我在第4行而不是第5行获得例外?

1 个答案:

答案 0 :(得分:1)

这是在两种情况下发生的:

  • spark.default.parallelism未设置。
  • 您既不提供Partitioner也不提供reduceByKey
  • 的分区数

在这种情况下,reduceByKey急切地创建新的HashPartitioner,其分区数等于父RDD的分区数。要获得分区数,必须计算输入拆分。这需要在输入文件路径中存在文件,这似乎是缺失的,因此错误。

仅在执行操作调用后才会执行实际reduceByKey操作。

这与Why does sortBy transformation trigger a Spark job?

非常相似