2017-03-07 40 views
0

是否有人可以解释RDD countApprox()与count()之间的差异并且如果可能的话也可以回答哪个是最快的?它会有很大的帮助,我们有一个要求,其中计数()是非常缓慢需要大约30分钟的** ...尝试countApprox()它是**快速的第一次运行(**约1.2分),然后放缓至30分钟的 .....Spark:rdd.countApprox()vs rdd.count()

这是我们如何使用它不知道,如果是使用

rdd.countApprox(timeout=800, confidence=0.5) 

回答

3
  • COUNT()最好的办法 - 让您返回元素的个数一个RDD。
  • CountApprox - count()的近似版本,即使并非所有任务都完成,它在超时内返回潜在的不完整结果。

countApprox(timeout: Long, confidence: Double)

默认:置信度= 0.95

注:按火花源代码,用于支持countApprox被标记 '实验'。

如果超时时间= 800,您应该在< 1min内看到近似计数。

你确定没有其他事情导致30分钟的这种放缓吗? 分享你的代码/代码片段,以获得来自其他成员更准确的输入。

+0

仅供参考:超时时间以毫秒 –

0

rdd.count() is an action, which is an eager operation

这意味着您之前编写的所有其他转换将会由于Spark的懒惰评估而开始执行。因此,本质上它不仅是Count()操作,而且是所有其他正在等待执行的操作。

现在回到count()与countApprox()的问题。 计数就像从表中选择计数(*)一样。 countApprox可以有一个超时和置信水平,它返回一个近似正确的结果和一个你可以接受的数字。

我们应该在countApprox中使用countApprox,当我们更感兴趣知道一个大概的数字并且节省时间时,例如在流式应用程序中。 当你需要确切的计数例如记录或审计时应该使用Count()。

相关问题