我对Hadoop很陌生,而且我遇到了一些我无法通过Google找到的东西。
在“HelloWorld”Hadoop程序的Java版本中,字数统计,映射器函数接受一个键值对,这符合我对MapReduce如何工作的理解。根据我的理解,在单词计数示例中,键是行号,值是文本行本身:
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//Tokenize the line and print out token,1 for each
}
然而,在同一程序的python流示例中,python映射器似乎没有读取密钥:
#!/usr/bin/env python
import sys
# input comes from STDIN (standard input)
for line in sys.stdin:
# remove leading and trailing whitespace
line = line.strip()
# split the line into words
words = line.split()
for word in words:
print '%s\t%s' % (word, 1)
似乎python映射器只能从stdin中读取值部分。如何在python映射器中获取密钥(行号)?
提前致谢!!
答案 0 :(得分:0)
这里你没有使用任何像map这样的hadoop框架函数,它将字节偏移作为行号作为第一个参数(框架库函数在调用map函数时传递此值)。由于您正在阅读标准输入,因此您必须编写自定义实现来打印行号。像这样的东西 How to get byte offset in a file in python
希望这有帮助