Pydoop词频统计中map(int, icounts)里int的作用及原理问询
Pydoop词频统计中
map(int, icounts)的工作机制解析 关于icounts的理解
没错,icounts是一个包含多个字符串"1"的可迭代对象。因为在mapper阶段,每遇到一个单词就会输出(word, "1"),reducer会把同一个单词对应的所有"1"收集到icounts里。
int的作用
int是Python内置的类型转换函数,这里用来把icounts里的每个字符串"1"转换成整数1。原因很简单:mapper输出的value是字符串类型,直接用sum求和会报错(字符串无法做数值求和),必须转成整数才能进行计算。
为什么用map
map函数会遍历icounts的每一个元素,对每个元素执行int转换,返回一个包含所有整数1的迭代器。sum函数可以直接接收这个迭代器完成求和,这种写法比手动循环逐个转换再累加更简洁高效,是Python里处理批量类型转换的常用方式。
附示例代码:
# 词频统计 import pydoop def mapper(_, text, writer): for word in text.split(): writer.emit(word, "1") def reducer(word, icounts, writer): writer.emit(word, sum(map(int, icounts)))
内容的提问来源于stack exchange,提问作者dorien
相关产品推荐
相关产品推荐

