gpt4 book ai didi

Hadoop计算取决于最大值

转载 作者:可可西里 更新时间:2023-11-01 15:38:56 26 4
gpt4 key购买 nike

我有一个问题。

我想在一个大数据集上做一个映射,映射过程取决于最大值。

例如

Input:
(key) (value)
--------------
key1 1
key2 2
key3 5
key4 6
key5 9

我的计算依赖于这些值的最大值,来映射每个点。我想根据值中的最大数量将这些值分成几组。

比如前面输入的最大数字是9,我想把它们映射成3组。我将使用新 key 作为:(int) value/(Max/3)

output(of mapping)
(new key) (new Value)
----------------------
0 key1
0 key2
1 key3
1 key4
2 key5

我有以下映射器:

protected void map(Object key, InWritable value, Context context)
throws IOException, InterruptedException {
int MaximumValue=???;
int newKey = (int)value/(MaximumValue/3);
context.write(newKey,Key);
}

但是,在遍历所有记录之前,如何计算最大键呢?

最佳答案

你可以做到这一点。

注意:我说的是 w.r.t Hadoop 1.2.1。您可能需要为较新的 API 进行一些修改。

在您的驱动程序中,读取inputpath 并解析它并找到最大值。

BufferedReader br = new BufferedReader(new InputStreamReader(
fs.open(inpath)));
String line = "";
line = br.readLine();
int max = Integer.MIN_VALUE;
try {
while (line != null) {
if (line.trim().length() == 0 || line.trim().equals("")) {
line = br.readLine();
continue;
}
String[] parts = line.split(" ");
int val = Integer.parseInt(parts[1]);
if (val > max)
max = val;
line = br.readLine();
}
} finally {
br.close();
}
}

在你的配置中设置它。

conf.setInt("max_val", max);

并通过覆盖 configure() 方法在您的映射器中读取它。对于较新的 API,我认为您必须覆盖 setup() 方法。

@Override
public void configure(JobConf conf) {
max = Integer.parseInt(conf.get("max_val"));
}

关于Hadoop计算取决于最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20217264/

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