2015-03-13 21 views
1

我有一個像應用在各行單詞計數的MapReduce工作

LOW LOW HIGH LOW LOW 
LOW HIGH MOD LOW LOW 
HIGH LOW HIGH HIGH HIGH 
LOW LOW LOW LOW LOW 
.  . . . . 
.  . . . . 

的輸入文件,我想有結果如下:

Genuine 
Moderate 
Not_genuine 
Genuine 
. 
. 

爲此,我需要解析一行並在每行上應用WordCount,然後根據no。的高或低計數我會指定所需的結果。 通過使用Stringtokenizer所有線路都考慮在內,也split method沒有得到線(\n)結束。是有反正我可以通過這個問題繼續進行,並得到想要的答案

CODE做了MAPPER

這裏,我試圖用的\n

public void map(LongWritable key, Text value, Context context) 
    throws IOException, InterruptedException { 
    String line = value.toString(); 
    StringTokenizer tokenizer = new StringTokenizer(line); 
    while (tokenizer.hasMoreTokens()) { 
    if(tokenizer.equals("\n")){ 
     System.out.println("Line ends here"); 
     Log log = LogFactory.getLog(getClass()); 
     log.info("Line ends here"); 
     } 
    word.set(tokenizer.nextToken()); 
    context.write(word, one); 
} 
+0

你能否提供你的代碼mcve? (或者你使用嵌入式jar的時候執行的命令) – fxm 2015-03-13 15:27:56

+0

我試過了基本的wordCount MR作業來掃描,但是它會掃描整個輸入文件(我想掃描一行並生成輸出)。我甚至嘗試過使用NLineInputformat但不能設置一個相同的映射器。 – Anush 2015-03-13 15:44:35

+1

@TAKZO你的新行有問題嗎?如果您使用textinputformat,它會在檢測到換行符時自動採用新行。你可以用split方法去分隔一些分隔符。 – 221B 2015-03-13 16:42:25

回答

0

我覺得問題是你的輸入文件。

使用下面的代碼來檢查您的輸入文件是否正確。

public static void main(String agr[]) throws IOException { 
    BufferedReader br = new BufferedReader(new FileReader(
      "yourfilelocation")); 
    String line = null; 
    while ((line = br.readLine()) != null) { 
     System.out.println(line); 
    } 
} 

之後,您可以編寫用於統計映射器中不同單詞的邏輯。

希望這會有所幫助。

+0

所以這就是我所做的http://pastebin.com/mEbw6Jei,並且我實現了所需的輸出,但唯一的問題是我得到了行^ 2輸出值,即對於8行輸入文件,我得到了一組8行重複8次的輸出線。無法弄清楚問題實際上是什麼。此代碼的優化範圍還有 – Anush 2015-03-20 19:50:17

+0

,我只是看着它。只是嘗試更改私人最終靜態IntWritable一=新的IntWritable(1);並將其更改爲context.write(word,one); – 2015-03-21 13:01:42

+0

以及我不需要結果的計數值,因此context.write(word,null)也是如何使它重複它的行平方倍輸入? – Anush 2015-03-21 13:23:32

0

取來修改您的映射類,你可以有邏輯用於計算不同的話USI映射器功能一個哈希集類型的機制。所以你不需要減速器。

0

假設使用TextInputFormat,每個map()方法的輸入value是一行。因此,最後換行符沒有意義。這就是爲什麼你在log中沒有看到任何信息。

正如Karthik所說,你不需要減速器。您需要的只是彙總每個輸入value(即,行)的「高」,「低」和「MOD」的數量,並直接從映射器發出您的分類('正版','中等','非正版') 。