gpt4 book ai didi

java - 从文件中按 Hadoop 中的值排序

转载 作者:可可西里 更新时间:2023-11-01 14:20:28 25 4
gpt4 key购买 nike

我有一个包含一个字符串的文件,然后是一个空格,然后每一行都有一个数字。

示例:

Line1: Word 2
Line2 : Word1 8
Line3: Word2 1

我需要按降序对数字进行排序,然后将结果放入文件中并为数字分配一个等级。所以我的输出应该是一个包含以下格式的文件:

Line1: Word1 8 1
Line2: Word 2 2
Line3: Word2 1 3

有没有人有想法,我怎样才能在 Hadoop 中做到这一点?我将 Java 与 Hadoop 结合使用。

最佳答案

您可以像这样组织您的 map/reduce 计算:

map 输入:默认

map 输出:“键:数字,值:字”

_ 按键排序阶段 _

在这里,您需要覆盖默认排序器以按降序排序。

减少 - 1 个 reducer

减少输入:“键:数字,值:字”

归约输出:“key: word, value: (number, rank)”

保留一个全局计数器。对于每个键值对,通过递增计数器来添加排名。

编辑:这是自定义后代排序器的代码片段:

public static class IntComparator extends WritableComparator {

public IntComparator() {
super(IntWritable.class);
}

@Override
public int compare(byte[] b1, int s1, int l1,
byte[] b2, int s2, int l2) {

Integer v1 = ByteBuffer.wrap(b1, s1, l1).getInt();
Integer v2 = ByteBuffer.wrap(b2, s2, l2).getInt();

return v1.compareTo(v2) * (-1);
}
}

不要忘记实际将其设置为您工作的比较器:

job.setSortComparatorClass(IntComparator.class);

关于java - 从文件中按 Hadoop 中的值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8289508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com