为什么在hadoop mapper生成的文件中生成TAB空间



我写了一个这样的映射器:

@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

实际上我只想将生成的文件加载到hive表中。但是对于TAB空间,hive表中的值是错误的。

那么有没有办法删除文件中的制表符空间?

我不认为有一种方法可以删除键和值之间的制表符空间。但是,如果您不需要reducer,那么只需将所有信息放在映射器输出的键中:

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

将地图输出键的类型更改为Text。

相关内容

  • 没有找到相关文章

最新更新