2017-04-14 24 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