问题描述:数据结构<任务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的二次排序(Secondary Sort)原理,这是一个允许用户自定义排序规则以满足特定需求的功能。 首先,二次排序是在MapReduce框架内进行的一种特殊排序方式,它遵循两个主要步骤:第一字段排序和...
这个示例展示了Hadoop MapReduce在处理复杂排序需求时的灵活性,以及如何通过自定义Partitioner和Comparator实现特定的业务逻辑。对于大型的基站数据或者其他具有类似排序需求的场景,这样的解决方案非常有价值。...
二次排序(Secondary Sort)是Hadoop MapReduce中的一个重要概念,它允许用户自定义数据的最终排序方式,以满足更复杂的排序需求。这篇博客文章(虽然链接无法直接访问,但我们可以根据常规知识来解释这个概念)可能...
标题中的“Hadoop排序”指的是Hadoop框架中的MapReduce排序机制。MapReduce是Apache Hadoop的核心组件,主要用于处理和生成大规模数据集。在Hadoop中,数据被分割成多个块,然后并行处理,其中排序是一个关键步骤,...
21. **Mapper类**:Hadoop提供的Mapper类是实现Map阶段逻辑的基础类。 以上是对Hadoop大数据期末考试重点内容的详细解读,涵盖了Hadoop的分布式文件系统HDFS、MapReduce计算模型以及相关配置和操作细节,考生需要对...
总结来说,通过Hadoop MapReduce实现TF-IDF,我们可以高效地处理大规模文本数据,计算每个词在每个文档中的重要性,这对于信息检索、文本分类、主题模型等应用具有重要意义。实际操作中,需要编写Java代码,理解和...
总结来说,Hadoop的排序机制是通过MapTask和ReduceTask的组合操作实现的,而自定义排序则需要实现WritableComparable接口并重写compareTo方法。这种灵活性使得用户可以根据具体业务需求对数据进行复杂排序,从而优化...
【标题】Hadoop MapReduce 实现 WordCount MapReduce 是 Apache Hadoop 的核心组件之一,它为大数据处理提供了一个分布式计算框架。WordCount 是 MapReduce 框架中经典的入门示例,它统计文本文件中每个单词出现的...
Hadoop大作业排序代码 由于 MapReduce 中对 key 进行比较和排序,而 key 可以是任何实 现了 Writable 接口的类。 在 java 中,要实现类的大小比较可以实现 Comparable 接口并通 过重写 compareTo 方法来实现。 在 ...
### Hadoop构建与实现大数据解决方案 #### 一、Hadoop简介及重要性 Hadoop是一个开源框架,用于处理和存储大规模的数据集。它基于Google的两篇重要论文——Google File System (GFS) 和 MapReduce 的概念而创建。...
Hadoop的并行环境使得在大数据集上进行非支配排序成为可能,通过分布式计算可以快速找出不同代的帕累托前沿,进而指导种群向更好的解空间移动。 在Hadoop平台上实现遗传算法并行化,还需要考虑数据通信和协调问题。...
在大数据处理领域,Hadoop是一个不可或缺的开源框架...通过分析和运行提供的代码,学习者不仅可以掌握大矩阵乘法的分布式实现,还能深入理解Hadoop的工作原理和编程技巧,对于进一步探索大数据处理领域具有很高的价值。
在Hadoop MapReduce框架中,shuffle和排序是两个至关重要的步骤,它们发生在map阶段和reduce阶段之间,确保数据被正确地处理和聚合。下面将详细解释这两个概念以及它们的工作流程。 首先,shuffle(洗牌)过程是...
java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,hadoop应用java WriteHDFS实现,...
Hadoop 自定义 Partitioner 实现
在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储和计算的能力。本示例中的"had
【标题】"基于hadoop的简易云盘实现.zip"揭示了这个项目是关于利用Hadoop框架构建一个简单的云存储服务。Hadoop是一个开源的分布式计算框架,它允许处理和存储大量数据,尤其适合大数据处理场景。这个简易云盘的实现...
通过Java实现的Hadoop搜狗实验,不仅展示了Hadoop在处理大规模数据时的能力,也突显了Java在分布式计算中的灵活性。这个实验可以帮助学习者理解Hadoop的运作机制,提升他们在大数据领域的实践能力。对于企业和开发者...
Java课设基于Hadoop的kmeans实现对NBA球队球风聚类源码.zipJava课设基于Hadoop的kmeans实现对NBA球队球风聚类源码.zipJava课设基于Hadoop的kmeans实现对NBA球队球风聚类源码.zipJava课设基于Hadoop的kmeans实现对NBA...