gpt4 book ai didi

java - 在 Reducer 中获取输入文件

转载 作者:可可西里 更新时间:2023-11-01 16:32:51 25 4
gpt4 key购买 nike

我正在尝试编写一个 mapreduce 作业,我需要在其中迭代值两次。

因此,当给出数字 csv 文件时,我们需要将其应用于每一列。

为此,我们需要找到 minmax 值并将其应用到 equation(v1) 中。

到目前为止我所做的是

In map()
I emit the column id as key and each column as values
In Reduce()
I calculated the min and max values of each column.

在那之后我就卡住了。接下来我的目标是应用等式

(v = [(v − minA)/(maxA − minA)]*(new maxA − new minA ) + new minA )

我的 new maxA 和 new minA 分别是 0.1,0.0 我还有每一列的最大值和最小值。为了应用 eqn v1,我需要获取 v,即输入文件。

如何获取?

我以为是-

从输入的 csv 文件中获取第一行(鸢尾花数据集)

[5.3,3.6,1.6,0.3]

为每个属性应用 eqn 并发出整行(Reducer 本身已知最小值和最大值)。但是在 reducer 中,我只会获取列值。否则我应该将我的输入文件作为 reducer() 的 setup() 中的参数读取。

这是最佳实践吗?任何建议。

更新

按照 Mark Vickery 的建议,我做了以下事情。

public void reduce(Text key, Iterable<DoubleWritable> values, Context context) throws IOException,
InterruptedException {
System.out.println("in reducer");
double min = Integer.MAX_VALUE,max = 0;
Iterator<DoubleWritable> iterator = values.iterator();
ListIterator<DoubleWritable> lit = IteratorUtils.toListIterator(iterator);
System.out.println("Using ListIterator 1st pass");
while(lit.hasNext()){
System.out.println(lit.next());
DoubleWritable value = lit.next();
if (value.get()< min) {
min = value.get();
}
if (value.get() > max) {
max = value.get();
}
}
System.out.println(min);
System.out.println(max);

// move the list iterator back to start
while(lit.hasPrevious()){
lit.previous();
}

System.out.println("Using ListIterator 2nd pass");
double x = 0;
while(lit.hasNext()){
System.out.println(lit.next());

}

在第 1 遍中,我能够正确获取所有值。但是对于第 2 遍,我只能重复获取每个元素。

最佳答案

您可以在同一个 reduce 中枚举 reducer 值两次。第一次计算 Min 和 Max,第二次计算你的值然后发出。

粗略的例子:

public void Reduce(string key, List<string> values, Context context)
{
var minA = Min(values);
var maxA = Min(values);

foreach (var v in values)
{
var result = [(v − minA)/(maxA − minA)]*(new maxA − new minA ) + new minA;

context.Emit(result);
}
}

关于java - 在 Reducer 中获取输入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22005722/

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