请有人解释一下RDD countApprox()与count()之间的区别,如果可能的话也可以回答哪个最快?如果计数()非常慢,需要大约30分钟的...tried countApprox()
这就是我们使用它的方式,不确定它是否是最好的使用方法。
rdd.countApprox(timeout=800, confidence=0.5)
发布于 2017-03-07 20:58:45
countApprox(timeout: Long, confidence: Double)
违约:信心= 0.95
注意:根据星火源代码,对countApprox的支持被标记为“实验性”。
使用timeout=800,您应该可以在<1分钟内看到一个近似计数。
你确定是其他原因导致了30分钟的减速吗?共享您的代码/代码片段,以便从其他成员获得更准确的输入。
发布于 2018-09-22 01:07:50
不是我的答案,但有一个非常有用和重要的答案here。
在非常短的时间内,即使这比超时更长,countApprax.getFinalValue
也会阻塞。
getInitialValue
不阻塞,因此您将在超时期间得到响应。
但是,正如我从痛苦的经历中学到的,即使您使用getInitalValue
,这个过程也将继续到最后的价值。
如果在循环中重复此操作,则getFinalValue
将在从getInitialValue
检索结果后很长时间内对多个RDDs运行。这会导致OOM条件和广播错误难以诊断。
发布于 2017-11-27 06:36:17
rdd.count() is an action, which is an eager operation
。
这意味着您之前编写的所有其他转换都将开始执行,这是因为Spark的惰性评估。因此,从本质上说,它不仅占用了所有时间的Count()操作,而且还需要等待执行的所有其他操作。
现在回到count() vs countApprox()的问题。计数就像从表中进行选择计数(*)一样。countApprox可以有一个超时和信任级别,返回一个大致正确的结果和一个可以接受的数字。
当我们更感兴趣地了解一个近似数字并节省时间时,我们应该使用countApprox,例如在流应用程序中。当您需要精确的计数时,应使用Count(),例如记录某项内容或进行审计。
https://stackoverflow.com/questions/42656040
复制相似问题