2014-03-12 22 views
2

我寫了這樣的映射文件中生成:爲什麼標籤空間是由Hadoop的映射器產生

@Override 
protected void map(VarLongWritable userId, RecommendedItemsWritable recommendations, Context ctx) throws IOException, 
     InterruptedException { 

    List<RecommendedItem> items = recommendations.getRecommendedItems(); 
    for (RecommendedItem item : items) { 
     long userID = Long.valueOf(userId.toString().trim()); 
     System.out.println(userID); 
     ctx.write(new LongWritable(userID), new Text(item.getItemID() + "," + item.getValue())); 
    } 
} 

,並生成以下內容:

1 ,105,3.8652005 
1 ,106,3.7047918 
1 ,104,3.6800702 
2 ,106,2.7261393 
2 ,105,2.4083052 
2 ,107,2.0 
3 ,106,3.5539715 
3 ,102,3.4113002 
3 ,103,3.323024 
4 ,107,4.674651 
4 ,105,4.371781 
4 ,102,4.0743575 
5 ,107,3.754705 

其實我只是想將生成的文件加載到配置單元表中。 但帶有製表符空間,配置單元表中的值是錯誤的。

那麼有什麼辦法可以刪除文件中的標籤空間?

回答

0

我不認爲有一種方法可以刪除鍵和值之間的標籤空間。不過,如果你並不需要一個減速,然後,只是把所有的信息在映射器輸出的關鍵:

ctx.write(new Text(userID + "," + item.getItemID() + "," + item.getValue()), new Text("")); 

更改地圖輸出鍵爲文本類型。

+0

是的,謝謝。這確實有用。 – jeffreyji

+1

實際上這裏有一個配置:mapred.textoutputformat.separator「,設置爲」,「,然後就可以了。 – jeffreyji