0

mapperでキーとなるfloatの配列を渡したいのですが、

Such as [0.6, 0, 10]

StringUtils.join を使用して文字列に変換し、次のように記述します。

context.write(new Text(str), value);

しかし、レデューサークラスでは、私が得たものは次のとおりです。

"0 0 1"

修正方法は?Hadoop 1.0.4 を使用しています

4

1 に答える 1

0

float 配列を使用して発行できますArrayWritable。配列をキーとして発行するかどうかはわかりません。以下は、値と同じものを発行する方法です。

ArrayWritable does not implement WritableComparable, so it can't currently
be used as a mapper output key - those keys have to be sorted during the
shuffle, and thus the type must be WritableComparable.

通常、キーを発行するには、カスタムの Writable Comparable Class を使用します。

そのためには、ドライバークラスで同じものを定義する必要があります public class Driver {

public static class DoubleArrayWritable extends ArrayWritable {
    public DoubleArrayWritable() {
        super(DoubleWritable.class);
    }
}

public static void main(String[] args) {

マッパーで

DoubleArrayWritable pointArray = new DoubleArrayWritable();
DoubleWritable[] data = new DoubleWritable[numAttributes];
for (int k = 0; k < numAttributes; k++) {
    data[k] = new DoubleWritable(point[k]);
}
pointArray.set(data);
context.write(new Text("Array"), pointArray);

これがいつか役立つことを願っています。

于 2014-08-20T04:00:26.720 に答える