Linux:reduce实现 合并列表数据

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

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

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

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

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

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

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

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

sort1	1  
sort2	3  
sort2	88  
sort2	54  
sort1	2  
sort6	22  
sort6	58
sort6	888

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

user_id	 order_id_list

sort1	1,2
sort2	3,54,88
sort6	22,58,888

创建map.py

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

import sys 

for line in sys.stdin:
	key = line.strip().split('\t')
	print ('\t'.join(key))
	#print(key)

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

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

创建red.py

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

import sys 
cur = None
cur_list = []
for line in sys.stdin:
	ss = line.strip().split('\t')
	key = ss[0]
	val = ss[1]
	if cur == None:
		cur = key
	elif cur!=key:		
		print ('%s\t%s'%(cur,','.join(cur_list)))
		cur = key
		cur_list = []
	cur_list.append(val)
print ('%s\t%s'%(cur,','.join(cur_list)))

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

相关文章