代码之家  ›  专栏  ›  技术社区  ›  Ged

火花RDD性能流水线

  •  1
  • Ged  · 技术社区  · 6 年前

    如果我们有,说:

    val rdd1 = rdd0.map( ...  
    

    然后

    val rdd2 = rdd1.filter( ...
    

    然后,当由于一个动作实际运行时,RDD2可以开始计算已知的已计算的RDD1结果,还是必须等到RDD1工作全部完成?当我读到星火的东西时,这对我来说并不明显。informatica流水线确实做到了这一点,所以我认为它可能在spark中也做到了。

    1 回复  |  直到 6 年前
        1
  •  3
  •   user9924728    6 年前
    • spark转换是懒惰的,所以除了计算依赖dag之外,这两个调用都不做任何事情。所以你的代码连数据都没有。

      对于要计算的任何内容,必须在 rdd2 或者它的后代。

    • 默认情况下也有健忘的,所以除非你 cache rdd1 每次都会重新评估 RDD2 被评估。

    • 最后,由于延迟计算,多个窄转换在一个阶段中组合在一起,代码将交叉调用映射和筛选函数。