RDD动作(例如first(),head(),isEmpty()..)是否会评估整个RDD?还是只是一部分?

我有一个RDD groupResultMap,并在下面编写代码。

if (groupResultMap.isEmpty) Map[String,Any]()
else  groupResultMap.mapPartitions ( //do somthing// ).collectAsMap

在代码中,如果RDD不为空,它将被评估两次。 你们认为如果在RDD不为空的情况下使用groupResultMap.cache()来避免多余的评估,性能会更好吗?

isEmpty()对RDD的评估是否与collectAsMap()相同? 还是isEmpty()仅评估需要采取措施的部分? 您知道,仅对RDD的一行进行评估就足以计算isEmpty()

的结果

谢谢。

shiqing22 回答:RDD动作(例如first(),head(),isEmpty()..)是否会评估整个RDD?还是只是一部分?

如果您查看isEmpty的实现,则它确实占用了RDD的一行并检查是否存在。

def isEmpty(): Boolean = partitions.length == 0 || take(1).length == 0

参见此处:https://snack.expo.io/@jasurkurbanov/updated2

因此,否-isEmpty的评估与collectAsMap的评估不同。 isEmpty比执行collectAsMap并检查地图的长度要有效得多,因为它仅根据需要部分评估RDD。

本文链接:https://www.f2er.com/3126595.html

大家都在问