mapperでキーとなるfloatの配列を渡したいのですが、
Such as [0.6, 0, 10]
StringUtils.join を使用して文字列に変換し、次のように記述します。
context.write(new Text(str), value);
しかし、レデューサークラスでは、私が得たものは次のとおりです。
"0 0 1"
修正方法は?Hadoop 1.0.4 を使用しています
mapperでキーとなるfloatの配列を渡したいのですが、
Such as [0.6, 0, 10]
StringUtils.join を使用して文字列に変換し、次のように記述します。
context.write(new Text(str), value);
しかし、レデューサークラスでは、私が得たものは次のとおりです。
"0 0 1"
修正方法は?Hadoop 1.0.4 を使用しています
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);
これがいつか役立つことを願っています。