【问题标题】:why tab space is generated in the file which is generated by hadoop mapper为什么在hadoop mapper生成的文件中会生成tab空间
【发布时间】:2014-03-12 08:31:02
【问题描述】:

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

@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

实际上我只是想将生成的文件加载到配置单元表中。 但是使用制表符空间,蜂巢表中的值是错误的。

那么有什么办法可以去掉文件中的tab空间呢?

【问题讨论】:

    标签: file hadoop map tabs space


    【解决方案1】:

    我认为没有办法删除键和值之间的制表符空间。但是,如果你不需要 reducer,那么,只需将所有信息放在 mapper 输出的 key 中即可:

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

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

    【讨论】:

    • 其实是有这个配置的:mapred.textoutputformat.separator",把这个设置成","就OK了。
    猜你喜欢
    • 2021-07-15
    • 2020-01-28
    • 1970-01-01
    • 2014-06-14
    • 2023-01-18
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多