Hive count(DISTINCT id )

2021-05-12  本文已影响0人  团团饱饱

SELECT count(DISTINCT orderid) FROM test.subOrderAllDetail

map 阶段的key 会全部汇总在一个reduce 上,导致一个reduce 处理所有数据。reduce 个数只有一个。不管你怎么设置参数:set mapred.reduce.tasks=100,实际执行任务的reduce 只有一个。

优化:
SELECT count(orderid)
FROM
(SELECT DISTINCT orderid
FROM test.subOrderAllDetail)tmp;

map 阶段对key 进行去重,在不同的task 上去重。之后发送到不同的reduce,reduce 个数不一定只有一个。可以通过set mapred.reduce.tasks=n 设置。

从而达到并行执行。

上一篇下一篇

猜你喜欢

热点阅读