Apache spark count()是否导致map()代码在Spark中执行?

Apache spark count()是否导致map()代码在Spark中执行?,apache-spark,pyspark,Apache Spark,Pyspark,所以,我知道Spark是一个懒惰的执行者。 例如,如果我打电话 post=pre.filter(lambda x:some_condition(x)).map(lambda x:do_some(x)) 我知道它不会立即执行 但是当我调用post.count()时,上面的代码会发生什么变化呢?我认为过滤将被强制执行,因为pre和post可能没有相同的行数,因为存在filter条件。但是,map是一种1对1的关系,因此计数不会受到影响。给定count(),是否在此执行map命令 跟进:当我想强制执行

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

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

我知道它不会立即执行

但是当我调用
post.count()
时,上面的代码会发生什么变化呢?我认为过滤将被强制执行,因为
pre
post
可能没有相同的行数,因为存在
filter
条件。但是,
map
是一种1对1的关系,因此计数不会受到影响。给定
count()
,是否在此执行
map
命令


跟进:当我想强制执行
map
语句时(假设
count()
不起作用),我可以调用什么来强制执行?我希望不必使用
saveAsTextFile()

count
将执行沿袭中的所有转换,除非可以从缓存中获取某些阶段。这意味着每个转换将至少执行一次,因为您不依赖于由
某些条件触发的某种副作用,或者
做一些事情
应该可以正常工作。

count
将执行沿袭中的所有转换,除非可以从缓存中获取某些阶段。这意味着每个转换都将至少执行一次,只要您不依赖于由
某个条件触发的某种副作用,或者
执行某个操作
它应该可以正常工作。

这是否意味着,给定上面的命令,我应该在更高的位置执行
pre.cache()
(例如,当我创建
pre
)时,它不会在调用
post.count()
时重新执行创建
pre
的沿袭?(这假设在
post
中使用
pre
之前,我还必须对它做一些事情。如果pre不是shuffleddd,那么是的。如果
map
是RDD的最后一个操作,它不应该跳过调用'count()的
map
函数吗?)'优化,因为它是一个1对1映射,除非
map
被称为
pre.filter().map().filter()
,或者有其他转换,如
flatmap
,可能导致1对多映射?没有检查计算
count()的源代码。'
@AnchitChoudhry应该或可能?理论上是可以的。但是不能保证
map
中使用的函数没有副作用(这里异常是最简单的副作用)。除非编程模型受到限制(如
DataFrame
API)应用的唯一优化是将多个转换合并到单个阶段。Scala集合稍后会应用其他一些技巧,但它不是特定于Spark的。这是否意味着,根据上面的命令,我应该在更高的位置执行
pre.cache()
(例如,当我创建
pre
时),这样它就不会在调用
post.count()
时重新执行创建
pre
的沿袭?(这假设在
post
中使用
pre
之前,我还必须对它做一些事情。如果pre不是shuffleddd,那么是的。如果
map
是RDD的最后一个操作,它不应该跳过调用'count()的
map
函数吗?)'优化,因为它是一个1对1映射,除非
map
被称为
pre.filter().map().filter()
,或者有其他转换,如
flatmap
,可能导致1对多映射?没有检查计算
count()的源代码。'
@AnchitChoudhry应该或可能?理论上是可以的。但是不能保证
map
中使用的函数没有副作用(这里异常是最简单的副作用)。除非编程模型受到限制(如
DataFrame
API)应用的唯一优化是将多个转换合并到单个阶段。Scala集合稍后将应用其他一些技巧,但它不是特定于Spark的。