问题描述:数据结构<任务id,资源类型,发布日期,词,频度>
已经按 任务id,资源类型,发布日期,词 汇总了频度信息,现在需要以<任务id,资源类型,发布日期>为分组,组内按频度倒排,提取前200条记录
参考hadoop自带示例中的org.apache.hadoop.examples.SecondarySort实现
复合key: WordFreq<TagHead,词,频度>,其中TagHead表达group,即<任务id,资源类型,发布日期>
1.在WordFreq中通过Override compareTo实现组内按频度倒排
@Override
public int compareTo(WordFreq other) {
return ComparisonChain.start()
.compare(this.getGroup(), other.getGroup())
.compare(other.count, this.count)
.compare(this.tag.getWord(), other.tag.getWord()).result();
}
2.在TagHead中Override如下3项
@Override
public int compareTo(TagHead other) {
return ComparisonChain.start().compare(this.tagsid, other.tagsid)
.compare(this.sourceType, other.sourceType)
.compare(this.releaseDateDay, other.releaseDateDay).result();
}
@Override
public boolean equals(Object o) {
if (o instanceof TagHead) {
TagHead other = (TagHead) o;
return this.tagsid.equals(other.tagsid)
&& this.sourceType.equals(other.sourceType)
&& this.releaseDateDay.equals(other.releaseDateDay);
}
return false;
}
@Override
public int hashCode() {
int hash = (this.tagsid != null ? Integer.parseInt(this.tagsid) : 0);
hash += (this.sourceType != null ? Integer.parseInt(this.sourceType) * 13
: 0);
hash += (this.releaseDateDay != null ? Integer
.parseInt(this.releaseDateDay.replace("-", "")) * 7 : 0);
return hash;
}
3.简单项:SimpleWordFreq<词,频度>
4.
public class SubSortingWordFreqMapper extends
Mapper<LongWritable, Text, WordFreq, SimpleWordFreq>{
...
}
public static class SubSortingWordFreqReducer extends
Reducer<WordFreq, SimpleWordFreq, Text, NullWritable> {
@Override
protected void reduce(WordFreq key, Iterable<SimpleWordFreq> values,
Context context) throws IOException, InterruptedException {
for (SimpleWordFreq value : values) {
...
}
}
}
5.自定义Partitioner,计算nature key即group的哈希值
public class TagCloudPartitioner extends Partitioner<WordFreq, SimpleWordFreq> {
private static Logger log = LoggerFactory
.getLogger(TagCloudPartitioner.class);
@Override
public int getPartition(WordFreq key, SimpleWordFreq value, int numPartitions) {
int hashCode = key.getGroup().hashCode();
log.debug(key.getGroup().getHead("_") + ";hashCode=" + hashCode);
return hashCode % numPartitions;
}
}
6.自定义groupComparator
public class TagCloudHeadGroupingComparator extends WritableComparator {
protected TagCloudHeadGroupingComparator() {
super(WordFreq.class, true);
}
@Override
public int compare(WritableComparable tp1, WritableComparable tp2) {
WordFreq wordFreq = (WordFreq) tp1;
WordFreq wordFreq2 = (WordFreq) tp2;
return wordFreq.compareGroup(wordFreq2);
}
}
7.调用时特殊设置
job.setPartitionerClass(TagCloudPartitioner.class);
job.setGroupingComparatorClass(TagCloudHeadGroupingComparator.class);
相关推荐
Hadoop 大数据方向 mapreduce计算中的二次排序,讲解透彻
hadoop分区二次排序代码示例,包含基站数据集,对基站数据,按电话号码升序、到达时间降序进行排序,只需打包成jar,即可在hadoop集群中运行
hadoop 构建与实现大数据解决方案
Hadoop大作业排序代码 由于 MapReduce 中对 key 进行比较和排序,而 key 可以是任何实 现了 Writable 接口的类。 在 java 中,要实现类的大小比较可以实现 Comparable 接口并通 过重写 compareTo 方法来实现。 在 ...
hadoop分区二次排序示例,对基站数据,按电话号码升序、到达时间降序进行排序
基于Hadoop大数据平台实现遗传算法并行化,借助于Hadoop中的MapReduce模型,将遗传算法划分为Map和Reduce两个阶段,在Map阶段并行化执行。真正意义上实现了遗传算法的并行化。
java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,...
Hadoop 自定义 Partitioner 实现
Hadoop mapreduce 实现KMeans,可用
Hadoop 用mapreduce实现Wordcount实例,绝对能用
用MapReduce实现TF-IDF,Hadoop版本是2.7.7,参考某教程亲自手写的,可以运行,有问题可以留言
Java课设基于Hadoop的kmeans实现对NBA球队球风聚类源码.zipJava课设基于Hadoop的kmeans实现对NBA球队球风聚类源码.zipJava课设基于Hadoop的kmeans实现对NBA球队球风聚类源码.zipJava课设基于Hadoop的kmeans实现对NBA...
用Hadoop实现的大矩阵乘法,包括代码设计思路以及可以执行的源代码。已在hadoop-1.0.3平台测试通过,对初学者是很好的材料。
naive bayes在hadoop上的实现,主要是mapreduce程序
本实例依托于springmvc框架,采用maven作为jar包管理仓库,通过引用hadoop相关jar包,编写了hdfs操作工具类,能够在web端实现文件远程上传至hdfs。
hadoop实现的搜狗实验用java实现的
Hadoop mapreduce 实现MatrixMultiply矩阵相乘
在单机环境下按多关键字对大数据排序需要较长的执行时间,为了提高按多关键字对大数据排序的效率,根据Hadoop的MapReduce模型,给出了两种基于Hadoop的多关键字排序方法。方法一在Reduce函数中使用链式基数排序算法...
基于Hadoop和Python实现对豆瓣电电影数据的爬取及可视化分析源码+项目说明.zip基于Hadoop和Python实现对豆瓣电电影数据的爬取及可视化分析源码+项目说明.zip基于Hadoop和Python实现对豆瓣电电影数据的爬取及可视化...
使用hadoop实现WordCount详细实验报告,配有环境变量配置截图以及实验运行及结果详细过程描述与截图