在此HiveQL查询中如何执行地图归约?

如何解决在此HiveQL查询中如何执行地图归约?

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"在此查询中的意义是什么?

解决方法

每个映射器将读取文件拆分,对拆分进行某些操作(例如像pre-aggregation这样的pre-aggregation),并生成dt,uid(按dt分组和排序),因此将不同的dt放入不同的文件中,下一步由减速器消耗。

归约器将读取由映射器准备的文件,因此同一归约器将读取具有相同dt的记录,因为记录是由dt分发并在映射器上排序的。 Reducer将合并部分结果(来自映射器的文件)并进行一些count聚合。如果某些dt位于同一文件中,则记录将被排序,这将减少在reducer上要做的工作量。

cluster by dt = distribute by dt sort by dt

没有cluster by的情况下,两个reducer可能会收到相同的dt,这将导致无法正确执行计数,因为reducer彼此不了解并且也不共享它们之间的数据,因此将计算相同的dt部分在不同的化简器上,最终结果将包含多个具有相同dt

的记录

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?