我写了一个这样的映射器:
@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表中。 但是使用制表符空间时,配置单元表中的值是错误的。
那么有没有办法删除文件中的标签空间?
答案 0 :(得分:0)
我认为没有办法删除密钥和值之间的标签空间。但是,如果您不需要减速器,那么只需将所有信息放在映射器输出的键中:
ctx.write(new Text(userID + "," + item.getItemID() + "," + item.getValue()), new Text(""));
将地图输出键的类型更改为文本。