我想在Spark上创建数据帧的性能结果统计信息。我在groupBy之后调用count()动作并测量它花费的时间。
df.groupBy('Student').sum('Marks').count()
然而,我发现如果我使用collect()而不是count(),结果需要花费10倍的时间。为什么呢?
如果我正在执行上述基准测试,我应该使用count()或collect()。
感谢。
答案 0 :(得分:3)
Spark数据帧使用查询优化器(称为Catalyst)来加速Spark管道。在这种情况下,发生的事情有两种可能性:
收集比计数更贵。它涉及将所有数据分布在群集中,对其进行序列化,通过网络将其发送回驱动程序,然后对其进行反序列化。计数只涉及每个任务计算一次数字并发送(更小)。
Catalyst实际上只是计算唯一“Student”值的数量。 “sum”的结果从未实际使用过,因此永远不需要计算!