zoukankan      html  css  js  c++  java
  • hive学习08天-map及reduce共有几次排序

    题目1:计算用户发过多少朋友圈、获得多少点赞
    用你擅长的语言计算,数据如下:
    T1:10w行数据
    uid(用户id)    log_id(日记id)
    uid1    log_id1
    uid1    log_id2
    uid2    log_id3
    ...    ...
    
    T2:1000w行数据,注:没有被点赞的日记不记录
    log_id(日记id)    like_uid(点赞的用户id)
    log_id1    uid2
    log_id1    uid3
    log_id1    uid4
    log_id3    ud2
    ...    ...
    计算
    uid(用户id)    发过多少日记    获得多少点赞
    uid1    2    3
    uid2    1    1
    ...    ...    ...

    解法:

    ①统计每个用户发表日志量
    select  uid,count(*) as log_count from T1 group by uid
    
    ②统计每个用户的点赞量
    select uid,sum(like_uid) as log_like_count group_by uid
    from T1 join T2
    on T1.log_id =T2.log_id
    
    ③将两个表合并
    select tt1.uid,tt1.log_count,tt2.log_like_count from
    (
    select  uid,count(*) as log_count from T1 group by uid
    )tt1
    join
    (
    select uid,count(*) as log_like_count group_by uid
    from T1 join T2
    on T1.log_id =T2.log_id
    )tt2
    on
    tt1.uid=tt2.uid

    题目2:map及rudece阶段共有几次排序


    1)当map函数产生输出时,会首先写入内存的环形缓冲区,当达到设定的阀值,在刷写磁盘之前,后台线程会将缓冲区的数据划分成相应的分区。在每个分区中,后台线程按键进行内排序
    2)在Map任务完成之前,磁盘上存在多个已经分好区,并排好序的,大小和缓冲区一样的溢写文件,这时溢写文件将被合并成一个已分区且已排序的输出文件。由于溢写文件已经经过第一次排序,所有合并文件只需要再做一次排序即可使输出文件整体有序。
    3)在reduce阶段,需要将多个Map任务的输出文件copy到ReduceTask中后合并,由于经过第二次排序,所以合并文件时只需再做一次排序即可使输出文件整体有序

  • 相关阅读:
    [vijos P1531] 食物链
    [USACO精选] 第二章 动态规划(一)
    python 二分法查找
    python 小试牛刀之信息管理
    C语言链表实现冒泡法排序
    [笔记]libgdx在一张pixmap上按照笔刷画图
    [libgdx]项目通过RoboVm编译到ios平台并运行的环境配置
    android中sqlite distinct中使用多个字段的方法
    libgdx游戏中的中文字体工具类
    C语言实现字符串拷贝 拷贝指定长度字符串 字符串连接
  • 原文地址:https://www.cnblogs.com/students/p/10957353.html
Copyright © 2011-2022 走看看