架构师训练营第 1 期 -week12
问题1
在你所在的公司(行业、领域),正在用大数据处理哪些业务?可以用大数据实现哪些价值?
之前的公司是互联网医疗,对大数据有如下应用:
电子病历,根据患者特征,识别出某些重点关注的疾病案例,实时预警,监控,预测,并通过大屏展示数据
影像数据,根据病变特性进行机器学习,自动识别病变的案例
不良药物反应上报,根据病历中的某些患者特征,识别出是否药物过敏,医疗器械应用,化妆品反应等重点关注的案例,然后自动上报到国家系统
问题2
分析如下 HiveQL,生成的 MapReduce 执行程序,map 函数输入是什么?输出是什么,reduce 函数输入是什么?输出是什么?
page_view 表和 user 表结构与数据示例如下
整体过程
Map 函数
page_view &和user 两表的 JOIN 操作是通过 userid 关联的,所以 Map 操作的key为userid
page_view 表
| pageid | userid |
| :----: | :----: |
| 1 | 111 |
| 2 | 111 |
| 1 | 222 |
map函数输入参数(key,value,contex)
- key :value所在的偏移量
- value: page_view 表中的一行
- context:mapreduce的上下文
map函数输出List<Item>
输出是一个集合,其中集合的每个元素item是一根key,value键值对
- key: userid 的值
- value:是一个键值对,这个键值对的key是表id(这里用1代替),值是pageid,即:
| key: UserId | value: <TableId, PageId> |
| :---------: | :----------------------: |
| 111 | <1, 1> |
| 111 | <1, 2> |
| 222 | <1, 1> |
user 表
| userid | age |
| :----: | :--: |
| 111 | 25 |
| 222 | 32 |
map函数输入参数(key,value,contex)
- key :value所在的偏移量
- value: user 表中的一行
- context:mapreduce的上下文
map函数输出List<Item>
输出是一个集合,其中集合的每个元素item是一根key,value键值对
- key: userid 的值
- value:是一个键值对,这个键值对的key是表id(这里用2代替),值是age,即
输出如下所示:
| key: UserId | age: <TableId, Age> |
| :---------: | :-----------------: |
| 111 | <2, 25> |
| 222 | <2, 32> |
Shuffle
Shuffle 会将上述 两张表的map 输出结构按 userid排序以及分组,生成如下两张表的内容再交给不同的 Reduce 服务计算:
| key: UserId | value: <TableId, AgeOrPageId> |
| :---------: | :---------------------------: |
| 111 | <2, 25> |
| 111 | <1, 1> |
| 111 | <1, 2> |
和
| key: UserId | value: <TableId, AgeOrPageId> |
| :---------: | :---------------------------: |
| 222 | <2, 32> |
| 222 | <1, 1> |
Reduce
输入
输入是shuffle函数的输出,即(key,values,contex)
- key :userId
- values:List<TableId, AgeOrPageId>
- context:mapreduce的上下文
输出List<PageId,Age>
在输入的values中,pageid一定是表1的数据,age是表2的数据
所以只需要从 values 中过滤出 ages 和 pageIds 两个数组,然后对两个数组进行组合
- 第一个map[1,2]和[25]组合得到[1,25]和[2,25]
- 第二个map[1]和[32]组合得到[1,32]
最后结果为
| pageid | age |
| :----: | :--: |
| 1 | 25 |
| 2 | 25 |
| 1 | 32 |
评论