如何强制 Spark 执行代码?
我如何强制Spark执行对map的调用,即使它认为由于延迟评估而不需要执行?
我试图放地图调用,但这仍然没有解决问题。我的地图方法实际上将结果上传到HDFS。所以,它不是无用的,但Spark认为它是。cache()
我如何强制Spark执行对map的调用,即使它认为由于延迟评估而不需要执行?
我试图放地图调用,但这仍然没有解决问题。我的地图方法实际上将结果上传到HDFS。所以,它不是无用的,但Spark认为它是。cache()
简短的回答:
若要强制 Spark 执行转换,需要需要一个结果。有时,简单的操作就足够了。count
TL;DR:
好的,让我们回顾一下RDD
操作。
RDD
s 支持两种类型的操作:
例如,是一种转换,它通过函数传递每个数据集元素,并返回表示结果的新 RDD。另一方面,是一个使用某些函数聚合RDD的所有元素并将最终结果返回给驱动程序的操作(尽管还有一个并行返回分布式数据集)。map
reduce
reduceByKey
Spark中的所有转换都是懒惰的,因为它们不会立即计算结果。
相反,它们只记得应用于某些基本数据集(例如文件)的转换。仅当操作需要将结果返回到驱动程序时,才会计算转换。这种设计使Spark能够更有效地运行 - 例如,我们可以意识到通过map创建的数据集将用于reduce,并且仅将reduce的结果返回给驱动程序,而不是更大的map数据集。
默认情况下,每次对其运行操作时,都可以重新计算每个转换后的内容。但是,您也可以使用 (or ) 方法将 内存中保留,在这种情况下,Spark 会将元素保留在集群上,以便在您下次查询它时更快地访问它。还支持将 s 保留在磁盘上,或跨多个节点复制。RDD
RDD
persist
cache
RDD
若要强制 Spark 执行对映射的调用,需要一个结果。有时一个动作就足够了。count