返回列表
- 结帖
- 发帖
- 回复
- 关注
mapreduce 去重的问题怎么解决? [问题点数:40分]
快速回复 只显示楼主 关注帖子
mapreduce 去重的问题怎么解决? [问题点数:40分]
不显示删除回复 显示所有回复 显示星级回复 显示得分回复 只显示楼主
收藏
楼主
发表于: 2014-06-14 19:05:47
mapreduce
john 89
tom 100 mary 100 mary 200 tom 20 ———– 我刚学mapreduce,正在练习,上面这个我计算了很久也不对,就是对第一列去重,去重后应该是3 如果用mapreduce计算成功后,part-00000 的文件内容 是: 3 请问下,这个mapreduce怎么写啊? |
|
对我有用[0] 丢个板砖[0] 引用 | 举报 |
管理
回复次数:13
|
6
|
#1 得分:0
回复于: 2014-06-15 10:03:12
map按第一列为key,value无所谓
reduce class中初始化一个计数器 每个reduce方法中计数器每次加一 reduce 的cleanup方法中commit计数器就可以了 |
如果您对CSDN论坛有意见和建议 请直接在本帖指教
对我有用[0] 丢个板砖[0] 引用 | 举报 |
管理
|
#2 得分:0
回复于: 2014-06-15 21:40:54
map 知道怎么写了,那reduce的具体怎么写啊?
|
|
CSDN投诉事项说明
对我有用[0] 丢个板砖[0] 引用 | 举报 |
管理
|
#3 得分:0
回复于: 2014-06-18 10:37:48
直接一个Map,在Map里面定义一个全局的HashSet,map方法里面把key加入进去,cleanup方法里面把结果写入就行了。
|
|
对我有用[0] 丢个板砖[1] 引用 | 举报 |
管理
|
#4 得分:0
回复于: 2014-06-18 15:18:45
学习
|
|
对我有用[0] 丢个板砖[0] 引用 | 举报 |
管理
|
6
|
#5 得分:0
回复于: 2014-06-18 17:35:41
引用 3 楼 wulinshishen 的回复:
直接一个Map,在Map里面定义一个全局的HashSet,map方法里面把key加入进去,cleanup方法里面把结果写入就行了。 只用map不可能解决这个问题 如果在不同的map中都用同一个key,怎么解决? 必须用reduce去group后的key才能得到去重效果 |
对我有用[0] 丢个板砖[0] 引用 | 举报 |
管理
|
#6 得分:0
回复于: 2014-06-19 09:43:31
引用 5 楼 tntzbzc 的回复:
Quote: 引用 3 楼 wulinshishen 的回复:直接一个Map,在Map里面定义一个全局的HashSet,map方法里面把key加入进去,cleanup方法里面把结果写入就行了。 嗯,对,没想那么仔细,谢谢指正。 |
|
对我有用[0] 丢个板砖[0] 引用 | 举报 |
管理
|
#7 得分:0
回复于: 2014-06-20 15:16:20
引用 4 楼 tjytad1982 的回复:
学习 public static class Map extends Mapper public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString(); try { String[] lineSplit = line.split("\t"); context.write(new Text(lineSplit[0]), new Text("")); } catch (java.lang.ArrayIndexOutOfBoundsException e) { context.getCounter(Counter.LINESKIP).increment(1); return; } } } public static class Reduce extends Reducer private Set public void reduce(Text key, Iterable throws IOException, InterruptedException { for(Text value:values){ count.add(value.toString()); } context.write(key, new Text("")); } } ------------------------- 这个问题纠结我2周了,这个方面的学习资料太少了,我的map和reduce是这样写的,但是数据量大一些,就会内存溢出,我想我这个思路是错误的 你说的 “必须用reduce去group后的key才能得到去重效果 ”,这个 map和reduce是具体怎么写的啊? |
|
对我有用[0] 丢个板砖[0] 引用 | 举报 |
管理
|
#8 得分:0
回复于: 2014-06-20 15:22:52
引用 7 楼 wzl189 的回复:
Quote: 引用 4 楼 tjytad1982 的回复:-------------刚才写的mapreduce错了,以这个为准学习 |
|
对我有用[0] 丢个板砖[0] 引用 | 举报 |
管理
|
#9 得分:0
回复于: 2014-06-20 15:33:13
引用 1 楼 tntzbzc 的回复:
map按第一列为key,value无所谓 谢谢了,请教下,你说的这个map我知道怎么写了,但是这个reduce怎么写啊? |
|
对我有用[0] 丢个板砖[0] 引用 | 举报 |
管理
|
6
|
#10 得分:0
回复于: 2014-06-20 17:30:04
我晚点写个完整例子给你
|
对我有用[0] 丢个板砖[0] 引用 | 举报 |
管理
|
6
|
#11 得分:0
回复于: 2014-06-20 20:47:41
reduce阶段只用一个计数器就行了 |
||
对我有用[1] 丢个板砖[0] 引用 | 举报 |
管理
|
#12 得分:0
回复于: 2014-06-20 22:45:45
引用 11 楼 tntzbzc 的回复:
太感谢了,你了解这么多啊,我都搞了2周,没有结果,想再请教最后一个问题: 假如 第一列是姓名,第二列是班级(先不管我这个需求是否合理) john 100 john 100 mary 100 mary 200 tom 200 想统计处如下结果,就是按班级人数去重 100 2 200 2 这个mapreduce怎么写啊? 望高手最后再解答下,万分感谢了。 |
|||
对我有用[0] 丢个板砖[0] 引用 | 举报 |
管理
|
6
|
#13 得分:0
回复于: 2014-06-21 11:41:41
map 输出key 用 班级 + 分隔符 + 姓名
重写 grouping 实现二次排序,如果reduce num > 1 还需要重写 partition reduce略作修改,增个姓名变量 ,比较当前姓名是否和前一个姓名是否一致,如果不一致 计数器+=1 代码就不贴了,LZ多思考一下,这种简单的MR不难解决 |
对我有用[0] 丢个板砖[0] 引用 | 举报 |
管理
|
返回列表
- 结帖
- 发帖
- 回复
- 关注
- 2014年4月微软MVP当选名单揭晓!
CSDN
CSDN社区问答精华QA
回复内容
匿名用户不能发表回复!登录|注册
- 编辑
- 预览
- 粗体
- 斜体
- 下划线
- ---------------
- 字体大小
- 字体颜色
- ---------------
- 图片
- 链接
- ---------------
- 左对齐
- 居中对齐
- 右对齐
- ---------------
- 引用
- 代码
- ---------------
- monkey
- onion
- ---------------
- 押宝
- ---------------
- 清除格式
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分 你还可以输入10000个字符(Ctrl+Enter)
- 请遵守CSDN用户行为准则,不得违反国家法律法规。
- 转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。
核心技术类目
全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace