count()会导致map()代码在Spark中执行吗?

Kat*_*ler 0 apache-spark pyspark

所以,我知道Spark是一个懒惰的执行者.例如,如果我打电话

post = pre.filter(lambda x: some_condition(x)).map(lambda x: do_something(x))

我知道它不会立即执行.

但是当我打电话时,上面的代码会发生什么post.count()?我想象中的滤波将被迫执行,因为prepost可能不会有相同的行数,因为有一个filter条件存在.但是,map是1对1的关系,因此计数不会受其影响.这个map命令会在这里执行count()吗?

跟进:当我想强制执行map语句时(假设count()不起作用),我可以调用哪些强制执行?我宁愿不必使用saveAsTextFile().

zer*_*323 5

count除非可以从缓存中获取某些阶段,否则将执行谱系中的所有转换.这意味着每次转换都将至少执行一次,因为您不依赖于某种由此触发的副作用,some_condition或者do_something它应该可以正常工作.

  • @AnchitChoudhry应该还是可以?从理论上说它可以.但是不能保证`map`中使用的函数是无副作用的(这里的例外是最简单的副作用).除非编程模型受到限制(如`DataFrame` API),否则应用的唯一优化是将多个转换合并为单个阶段.Scala集合稍后会应用其他一些其他技巧,但它不是特定于Spark的. (2认同)