SELECT COUNT( DISTINCT id ) FROM TABLE_NAME WHERE ...;
對一個表中符合條件的記錄統計不重復的id的總數。由於引入了DISTINCT,因此在Map階段無法利用combine對輸出結果消重,必須將id作為Key輸出,在Reduce階段再對來自於不同Map Task、相同Key的結果進行消重,計入最終統計值。作業運行時的Reduce Task個數為1,對於統計大數據量時,這會導致最終Map的全部輸出到單個ReduceTask處理。這唯一的Reduce Task需要Shuffle大量的數據,並且進行排序聚合等處理,這使得它成為整個作業的IO和運算瓶頸
改進:
SELECT COUNT(*) FROM (SELECT DISTINCT id FROM TABLE_NAME WHERE … ) t;