2012-11-03 31 views
0

我不確定是否理解TextInputFormat的工作方式。在文檔中提到:Hadoop Mapreduce:TextInputFormat和處理行?

純文本文件的InputFormat。文件被分解成行。

所以我認爲當我簡單地將我作爲Input的輸入值轉換爲我的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 
... 

誰能告訴我怎麼可以有處理此文件在我的地圖功能的線路?

+0

在TextInputFormat的情況下,映射的值是來自輸入的一行。如果不是,那麼程序中可能會有一些東西被搞亂。 –

+0

那你確定這個值只包含我輸入文件的一行嗎? – gaussd

+0

我將如何確定它:) –

回答

1

TextInputFormat可用作純文本文件的InputFormat。文件被分解成行。換行符或回車符都用於表示行結束。鍵是文件中的位置,值是文本行。 如果行尾不是換行符或回車符,則必須寫入您自己的InputFormat。

看看這個博客點沒有。 3它肯定會在行結束時分解行。 http://blog.cloudera.com/blog/2011/01/lessons-learned-from-clouderas-hadoop-developer-training-course/

我建議通過將文件打開成像TextEditor UltraEdit來檢查你的文件,並檢查新的行字符。

看看是否有幫助。