FROM (
FROM pv_users
SELECT TRANSFORM(pv_users.userid, pv_users.date)
USING 'python mapper.py'
AS dt, uid
CLUSTER BY dt) map_output
INSERT OVERWRITE TABLE pv_users_reduced
SELECT TRANSFORM map_output.dt, map_output.uid
USING 'python reducer.py'
AS date, count;
map reduce在这个查询中是如何工作的,它的意义是什么 "CLUSTER BY"
在这个查询中?
1条答案
按热度按时间piah890a1#
每个Map器将读取文件拆分,对其拆分执行某些操作(例如,像distinct这样的预聚合),并生成按dt分组和排序的dt、uid,因此不同
dt
将放在不同的文件中,这些文件将在下一步由减速器使用。还原程序将读取由Map程序准备的文件,因此使用相同的
dt
将由同一个reducer读取,因为记录是由dt分发并在mapper上排序的。reducer将合并部分结果(来自Map器的文件)并执行一些操作count
聚合。如果有的话dt
分别在同一个文件中,对记录进行排序,减少了对减速机要做的工作量。cluster by dt
=distribute by dt sort by dt
没有cluster by
,两个减速机可能接收相同的dt,这将导致无法正确执行计数,因为减速机彼此不了解,并且它们之间不共享数据,相同dt
将部分计算在不同的还原器上,最终结果将包含多个具有相同属性的记录dt