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