@Override public DoubleValue[] getBucketBoundary(int bucketNum, int totalNumBuckets) { double bucketSize = (max - min) / totalNumBuckets; return new DoubleValue[] {new DoubleValue(min + (bucketNum+1) * bucketSize) }; }
@Override public DoubleValue deserialize(DoubleValue reuse, DataInputView source) throws IOException { reuse.read(source); return reuse; }
@Test public void testDoubleValue() { DoubleValue double0 = new DoubleValue(10.2); Assert.assertEquals(10.2, double0.getValue()); DoubleValue double1 = new DoubleValue(10.2); DoubleValue double2 = new DoubleValue(-10.5); DoubleValue double3 = new DoubleValue(20.2); Assert.assertEquals(double0.compareTo(double0), 0); Assert.assertEquals(double0.compareTo(double1), 0); Assert.assertEquals(double0.compareTo(double2), 1); Assert.assertEquals(double0.compareTo(double3), -1); double0.write(mOut); double2.write(mOut); double3.write(mOut); DoubleValue double1n = new DoubleValue(); DoubleValue double2n = new DoubleValue(); DoubleValue double3n = new DoubleValue(); double1n.read(mIn); double2n.read(mIn); double3n.read(mIn); Assert.assertEquals(double0.compareTo(double1n), 0); Assert.assertEquals(double0.getValue(), double1n.getValue()); Assert.assertEquals(double2.compareTo(double2n), 0); Assert.assertEquals(double2.getValue(), double2n.getValue()); Assert.assertEquals(double3.compareTo(double3n), 0); Assert.assertEquals(double3.getValue(), double3n.getValue()); } catch (Exception e) {
/** * Returns true, if the aggregator value is zero, false otherwise. * * @param iteration The number of the iteration superstep. Ignored in this case. * @param value The aggregator value, which is compared to zero. * @return True, if the aggregator value is zero, false otherwise. */ @Override public boolean isConverged(int iteration, DoubleValue value) { return value.getValue() == 0; } }
@Override public DoubleValue getAggregate() { wrapper.setValue(sum); return wrapper; }
@Override public void serialize(DoubleValue record, DataOutputView target) throws IOException { record.write(target); }
/** * Returns true, if the aggregator value is zero, false otherwise. * * @param iteration The number of the iteration superstep. Ignored in this case. * @param value The aggregator value, which is compared to zero. * @return True, if the aggregator value is zero, false otherwise. */ @Override public boolean isConverged(int iteration, DoubleValue value) { return value.getValue() == 0; } }
@Override public DoubleValue getAggregate() { wrapper.setValue(sum); return wrapper; }
@Override public void serialize(DoubleValue record, DataOutputView target) throws IOException { record.write(target); }
@Override public DoubleValue[] getBucketBoundary(int bucketNum, int totalNumBuckets) { double bucketSize = (max - min) / totalNumBuckets; return new DoubleValue[] {new DoubleValue(min + (bucketNum+1) * bucketSize) }; }
@Override public void aggregate(DoubleValue element) { sum += element.getValue(); }
@Override public int parseField(byte[] bytes, int startPos, int limit, char delim, DoubleValue reusable) { int i = startPos; final byte delByte = (byte) delim; while (i < limit && bytes[i] != delByte) { i++; } String str = new String(bytes, startPos, i-startPos); try { double value = Double.parseDouble(str); reusable.setValue(value); this.result = reusable; return (i == limit) ? limit : i+1; } catch (NumberFormatException e) { setErrorState(ParseErrorState.NUMERIC_VALUE_FORMAT_ERROR); return -1; } }
@Override public DoubleValue deserialize(DoubleValue reuse, DataInputView source) throws IOException { reuse.read(source); return reuse; }
@Override public void map(Record pageWithRank, Collector<Record> out) { if (currentIteration == failingIteration + 1) { rank = pageWithRank.getField(1, rank); if (failingWorkers.contains(workerIndex)) { rank.setValue(uniformRank); } else { rank.setValue(rank.getValue() * rescaleFactor); } pageWithRank.setField(1, rank); } out.collect(pageWithRank); } }
@Override public DoubleValue createValue() { return new DoubleValue(); }
@Override public void aggregate(DoubleValue element) { sum += element.getValue(); }
@Override public int parseField(byte[] bytes, int startPos, int limit, char delim, DoubleValue reusable) { int i = startPos; final byte delByte = (byte) delim; while (i < limit && bytes[i] != delByte) { i++; } String str = new String(bytes, startPos, i-startPos); try { double value = Double.parseDouble(str); reusable.setValue(value); this.result = reusable; return (i == limit) ? limit : i+1; } catch (NumberFormatException e) { setErrorState(ParseErrorState.NUMERIC_VALUE_FORMAT_ERROR); return -1; } }
@Override public void join(Record vertexWithDelta, Record vertexWithOldRank, Collector<Record> out) throws Exception { DoubleValue deltaVal = vertexWithDelta.getField(1, DoubleValue.class); DoubleValue currentVal = vertexWithOldRank.getField(1, DoubleValue.class); newRank.setValue(deltaVal.getValue() + currentVal.getValue()); vertexWithOldRank.setField(1, newRank); out.collect(vertexWithOldRank); } }