2014-03-12 25 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