Hadoop中自定义Partitioner,但是不同的key仍然在一个输出文件中
来源:互联网 发布:问道手游秒公示软件 编辑:程序博客网 时间:2024/06/16 22:28
问题描述:
在自定义Partitioner的时候,想要实现一个简单的功能:将对应的key为“short”、“right”和“long”的分别存储在3个文件中。因为默认是存储在一个文件中,所以需要自定义Partitioner。
在实现功能的时候,想要通过判断key的值来决定result,代码如下:
public int getPartition(Text key, Text value, int numPartition) {// TODO Auto-generated method stubint result = 1;if(key.equals("short")){result = 0 % numPartition; //part-r-00000}else if(key.equals("right")){result = 1 % numPartition; //part-r-00001}else if(key.equals("long")){result = 2 % numPartition; //part-r-00002}return result;}但是不同的key对应的输出结果仍然在一个文件中,刚开始以为是mapreduce函数的问题,后来经过各种检查,发现问题是出现在自定义Partitioner,结果会将其输出到result初始化的那个值中,即if后面的判断语句结果一直是false。
问题原因:
因为key的类型是Text类型,而key.equals("short")中的"short"是String类型。所以即使key的值是“short”,key.equals("short")的结果仍然是false,因为类型不匹配。
问题解决:
将判断语句改成key.toString().equals("short"),这样就将Text类型的key,先转化成String类型再做比较,这样可以很好地满足我们的需求。
总结:
有些value我们直接看可能是相同的,但是若类型不一样,代码就会认为其不是同一个值。
阅读全文
0 0
- Hadoop中自定义Partitioner,但是不同的key仍然在一个输出文件中
- FirstKeyIntPartitioner---hadoop中支持快速查询的自定义Partitioner
- Hadoop中Partitioner解析
- Hadoop基于WordCount的Mapper、Reducer、Combiner、Partitioner和自定义多文件输出
- hadoop中Partitioner、WritableComparator的自己总结
- Hadoop partitioner及自定义partitioner
- Hadoop自定义分区Partitioner
- Hadoop的MapReduce中多文件输出
- Hadoop的MapReduce中多文件输出
- Hadoop的MapReduce中多文件输出
- Hadoop的MapReduce中多文件输出
- Hadoop的MapReduce中多文件输出 .
- Hadoop的MapReduce中多文件输出
- log4j不同的日志输出到不同的文件中
- 在Java中自定义的一个key对多个Value的map
- hadoop用MultipleInputs/MultiInputFormat实现一个mapreduce job中读取不同格式的文件
- 如何在一个工程里面实现不同的功能打入不同的日志文件中【log4net】
- [Hadoop系列]Hadoop的MapReduce中多文件输出
- Web自动化测试二:selenium打开和登录浏览器(火狐、IE、chrome)
- Android Studio调试smali代码
- 又是一个晴朗的早晨
- Markdown语法
- linux下wget如何下载整个网站,或者特定目录全部文件
- Hadoop中自定义Partitioner,但是不同的key仍然在一个输出文件中
- 26
- 基于K3+IMS系统搭建轻量级物料信息库系统
- 27
- wordmark(markdown编辑器)下载 v2.2.5绿色免费版
- 28
- 用Repo强制同步远程代码
- Linux 用户管理相关文件
- 29