所以,我知道Spark是一个懒惰的执行者。 例如,如果我打电话
post = pre.filter(lambda x: some_condition(x)).map(lambda x: do_something(x))
我知道它不会立即执行。
但是当我调用post.count()
时,上面的代码会发生什么?我想过滤会被强制执行,因为pre
和post
可能没有相同的行数,因为那里有filter
条件。但是,map
是一对一关系,因此计数不会受其影响。在给定map
?
count()
命令会在这里执行吗?
跟进:当我想强制执行map
语句时(假设count()
不起作用),我可以调用什么强制执行?我宁愿不必使用saveAsTextFile()
。
答案 0 :(得分:5)
count
将执行沿袭的所有转换,除非可以从缓存中获取某些阶段。这意味着每次转换都将至少执行一次,因为您不依赖于由some_condition
或do_something
触发的某种副作用,它应该可以正常工作。