Linux:reduce实现 合并列表数据

x33g5p2x  于2021-11-21 转载在 Linux  
字(0.8k)|赞(0)|评价(0)|浏览(530)

与这篇博文有点关系的可以参考下:

① MapReduce 计算框架 —— 执行流程详解

② 在Linux环境实现wordcount:mapper,reducer的代码创建,脚本实现map,reduce

③ Linux实现 map 返回列表形式操作

④ Linux hadoop 脚本实现 reduce合并数据

要求:把key整合起来,value成列表形式。

首先,准备数据 1.data,\t 分割符。

  1. sort1 1
  2. sort2 3
  3. sort2 88
  4. sort2 54
  5. sort1 2
  6. sort6 22
  7. sort6 58
  8. sort6 888

我们要想实现的结果如下:

  1. user_id order_id_list
  2. sort1 1,2
  3. sort2 3,54,88
  4. sort6 22,58,888

创建map.py

标准读取1.data数据,读取每行数据以 \t 分隔;join连接输出为字符串类型。

  1. import sys
  2. for line in sys.stdin:
  3. key = line.strip().split('\t')
  4. print ('\t'.join(key))
  5. #print(key)

输入命令:cat 1.data | python map.py | sort -k1

注释 print (’\t’.join(key)),输出:print(key),结果如下:以列表形式输出。

创建red.py

标准读取每行数据,[0]是key,[1]是value。

  1. import sys
  2. cur = None
  3. cur_list = []
  4. for line in sys.stdin:
  5. ss = line.strip().split('\t')
  6. key = ss[0]
  7. val = ss[1]
  8. if cur == None:
  9. cur = key
  10. elif cur!=key:
  11. print ('%s\t%s'%(cur,','.join(cur_list)))
  12. cur = key
  13. cur_list = []
  14. cur_list.append(val)
  15. print ('%s\t%s'%(cur,','.join(cur_list)))

输出结果如下:符合要求。

相关文章

最新文章

更多