【问题标题】:Hadoop - Map function key when streamingHadoop - 流式传输时映射功能键
【发布时间】:2015-10-19 19:15:53
【问题描述】:

我对 Hadoop 还很陌生,遇到了一些我无法通过 Google 找到的东西。

在 Java 版本的“HelloWorld”Hadoop 程序的字数统计中,mapper 函数接受一个键值对,这符合我对 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映射器只能从标准输入读取值部分。如何在 python 映射器中获取密钥(行号)?

提前致谢!!

【问题讨论】:

    标签: hadoop hadoop-streaming


    【解决方案1】:

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

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 2019-05-05
      • 2013-11-06
      • 2011-03-31
      • 1970-01-01
      • 2022-09-24
      • 1970-01-01
      相关资源
      最近更新 更多