Hadoop Mapreduce:TextInputFormat和处理行?

Hadoop Mapreduce:TextInputFormat和处理行?,text,hadoop,mapreduce,line,textinput,Text,Hadoop,Mapreduce,Line,Textinput,我不确定我是否理解TextInputFormat的工作方式。文件中说: 纯文本文件的输入格式。文件被分成几行 所以我假设,当我简单地将作为map函数输入的值转换为String时,我的文件中将有一行的字符串表示 public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { String line = value.toString()

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

纯文本文件的输入格式。文件被分成几行

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

    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
...

有人能告诉我如何在我的映射函数中处理此文件的行吗?

文本输入格式作为纯文本文件的输入格式。文件被分成几行。换行符或回车符用于表示换行结束。键是文件中的位置,值是文本行。。 如果行尾不是换行符或回车符,则必须编写自己的输入格式

看看这个博客的第三点,它肯定会把这一行末尾的行分解掉。

我建议通过将文件打开到文本编辑器(如UltraEdit)并检查新行字符来签出您的文件


查看是否有帮助。

对于TextInputFormat,映射的值是输入的一行。如果不是,那么程序中可能会出现一些问题。那么您确定该值只包含我的输入文件的一行吗?value.toString()的结果是什么?和输入文件在同一目录中还有其他文件吗?如果您指定一个目录名,那么目录中的所有文件都将作为输入读取。我的输入目录中只有一个文件。city.dat,其中包含上述样式中的所有条目输入文件中未包含的行具体是什么,以及您具体期望的是什么?