Hadoop - 流式传输时映射功能键

时间:2015-10-19 19:15:54

标签: hadoop hadoop-streaming

我对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映射器中获取密钥(行号)?

提前致谢!!

1 个答案:

答案 0 :(得分:0)

这里你没有使用任何像map这样的hadoop框架函数,它将字节偏移作为行号作为第一个参数(框架库函数在调用map函数时传递此值)。由于您正在阅读标准输入,因此您必须编写自定义实现来打印行号。像这样的东西 How to get byte offset in a file in python

希望这有帮助