【问题标题】:on spark, some operations are being executed before an action is defined?在火花上,在定义动作之前正在执行一些操作?
【发布时间】:2017-02-22 04:21:55
【问题描述】:

我有以下火花简单的例子:

#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",正如预期的那样。

公认的是我在第 4 行得到了这个异常。我知道我在第 1 行、第 2 行和第 3 行中没有收到此错误,因为尚未执行计算。 当我有将结果写入文件的操作时,计算仅在第 5 行执行。那么,为什么我在第 4 行而不是第 5 行出现异常?

【问题讨论】:

    标签: apache-spark rdd


    【解决方案1】:

    这发生在两种情况下:

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

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

    实际的reduceByKey 操作只会在动作调用之后执行。

    这与Why does sortBy transformation trigger a Spark job?的问题非常相似

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多