2017-04-14 60 views
0

我想在Spark上创建数据帧的性能结果统计信息。我在groupBy之后调用count()动作并测量它花费的时间。但是,我发现如果我使用collect()而不是count(),结果花费了10倍多的时间。但是,我发现如果我使用collect()而不是count(),结果花费了10多倍的时间。为什么?我想衡量Spark的数据集合性能。计数还是收集行动?

而且,如果我正在执行像上面那样的基准测试,则应该使用count()或collect()的哪种方法。

谢谢。

回答

3

Spark数据框使用查询优化器(称为Catalyst)来加速Spark管道。在这种情况下,有两种可能性发生:

  1. 收集只比计数贵。它涉及到将所有数据分布在集群中,将其序列化,然后通过网络将其发送回驱动程序,然后对其进行反序列化。计数涉及每个任务只需计算一次数字并发送(小得多)。

  2. 催化剂实际上只是计算唯一的“学生”值的数量。 “总和”的结果永远不会被实际使用,所以它永远不需要计算!

+0

但是如果我使用Spark Thrift Server - Hive,它会以与count相同的时间获取groupby查询的结果。 – Patel

+0

那么也许在这种情况下,第一点是收集速度慢得多的原因。 – Tim

+0

非常感谢。我认为是这样,因为我的火花驱动程序在我的机器上,而且工作人员在远程分布式群集上。 – Patel