我有以下火花简单示例:
#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行获得例外?
答案 0 :(得分:1)
这是在两种情况下发生的:
spark.default.parallelism
未设置。Partitioner
也不提供reduceByKey
在这种情况下,reduceByKey
急切地创建新的HashPartitioner
,其分区数等于父RDD
的分区数。要获得分区数,必须计算输入拆分。这需要在输入文件路径中存在文件,这似乎是缺失的,因此错误。
仅在执行操作调用后才会执行实际reduceByKey
操作。