【问题标题】:Hadoop Mapreduce: TextInputFormat and processing lines?Hadoop Mapreduce:TextInputFormat 和处理线?
【发布时间】:2012-11-03 10:49:24
【问题描述】:

我不确定我是否理解 TextInputFormat 的工作方式。在文档中它说:

纯文本文件的 InputFormat。文件被分成几行。

所以我假设当我简单地将作为 map 函数的输入的值转换为字符串时,我的文件中会有一行的字符串表示。

    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

    String line = value.toString(); \\ one line of my input file?
    ...

    }

但是,在进一步处理该行后,发现它实际上不是我文件中的一行。我的文件 city.dat 如下所示:

Andorra la Vella|ad|Andorra la Vella|20430|42.51|1.51
Canillo|ad|Canillo|3292|42.57|1.6
...

谁能告诉我如何在我的地图函数中处理这个文件的行?

【问题讨论】:

  • 在 TextInputFormat 的情况下,映射的值是输入中的一行。如果不是,那么程序中可能出现了一些问题。
  • 那么你确定这个值只包含我输入文件的一行吗?
  • value.toString() 的结果是什么?与您的输入文件在同一目录中是否还有其他文件?如果您提供目录名称,则该目录中的所有文件都将作为输入读取。
  • 我的输入目录中只有一个文件。 city.dat 包含上述样式的所有条目
  • 您得到的不在输入文件中的行具体是什么,您具体期望什么?

标签: text hadoop mapreduce line textinput


【解决方案1】:

TextInputFormat 用作纯文本文件的 InputFormat。文件被分成几行。换行或回车用于表示行结束。键是文件中的位置,值是文本行。 如果在您的情况下,行尾不是换行符或回车,您必须编写自己的 InputFormat。

查看此博客点号。 3 它肯定会在行尾分解行。 http://blog.cloudera.com/blog/2011/01/lessons-learned-from-clouderas-hadoop-developer-training-course/

我建议通过在 UltraEdit 等 TextEditor 中打开文件来检查你的文件并检查换行符。

看看有没有帮助。

【讨论】:

    猜你喜欢
    • 2016-02-13
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多