@Override public final Message next() { if (first != null) { Message toReturn = first; first = null; return toReturn; } return this.source.next().f1.right(); }
public void flatMap(Either<Vertex<K, VV>, Tuple2<K, Message>> value, Collector<Tuple2<K, Either<NullValue, Message>>> out) { if (value.isRight()) { Tuple2<K, Message> message = value.right(); outTuple.f0 = message.f0; outTuple.f1 = Either.Right(message.f1); out.collect(outTuple); } } }
@Override public void reduce(Iterable<Tuple2<K, Either<NullValue, Message>>> messages, Collector<Tuple2<K, Either<NullValue, Message>>> out) throws Exception { final Iterator<Tuple2<K, Either<NullValue, Message>>> messageIterator = messages.iterator(); if (messageIterator.hasNext()) { final Tuple2<K, Either<NullValue, Message>> first = messageIterator.next(); final K vertexID = first.f0; final MessageIterator<Message> messageIter = new MessageIterator<>(); messageIter.setFirst(first.f1.right()); @SuppressWarnings("unchecked") Iterator<Tuple2<?, Either<NullValue, Message>>> downcastIter = (Iterator<Tuple2<?, Either<NullValue, Message>>>) (Iterator<?>) messageIterator; messageIter.setSource(downcastIter); combinerFunction.set(vertexID, out); combinerFunction.combineMessages(messageIter); } }
@Override public void coGroup( Iterable<Tuple2<Vertex<K, VV>, Either<NullValue, Message>>> messages, Iterable<Edge<K, EV>> edgesIterator, Collector<Either<Vertex<K, VV>, Tuple2<K, Message>>> out) throws Exception { final Iterator<Tuple2<Vertex<K, VV>, Either<NullValue, Message>>> vertexIter = messages.iterator(); if (vertexIter.hasNext()) { final Tuple2<Vertex<K, VV>, Either<NullValue, Message>> first = vertexIter.next(); final Vertex<K, VV> vertexState = first.f0; final MessageIterator<Message> messageIter = new MessageIterator<>(); if (getIterationRuntimeContext().getSuperstepNumber() == 1) { // there are no messages during the 1st superstep } else { messageIter.setFirst(first.f1.right()); @SuppressWarnings("unchecked") Iterator<Tuple2<?, Either<NullValue, Message>>> downcastIter = (Iterator<Tuple2<?, Either<NullValue, Message>>>) (Iterator<?>) vertexIter; messageIter.setSource(downcastIter); } computeFunction.set(vertexState.getId(), edgesIterator.iterator(), out); computeFunction.compute(vertexState, messageIter); } } }
@Override public Either<L, R> copy(Either<L, R> from) { if (from.isLeft()) { L left = from.left(); L copyLeft = leftSerializer.copy(left); return Left(copyLeft); } else { R right = from.right(); R copyRight = rightSerializer.copy(right); return Right(copyRight); } }
@Override public void serialize(Either<L, R> record, DataOutputView target) throws IOException { if (record.isLeft()) { target.writeBoolean(true); leftSerializer.serialize(record.left(), target); } else { target.writeBoolean(false); rightSerializer.serialize(record.right(), target); } }
@Override public Either<L, R> copy(Either<L, R> from, Either<L, R> reuse) { if (from.isLeft()) { Left<L, R> to = Either.obtainLeft(reuse, leftSerializer); L left = leftSerializer.copy(from.left(), to.left()); to.setValue(left); return to; } else { Right<L, R> to = Either.obtainRight(reuse, rightSerializer); R right = rightSerializer.copy(from.right(), to.right()); to.setValue(right); return to; } }
@Test public void testEitherWithObjectReuse() { EitherTypeInfo<LongValue, DoubleValue> eitherTypeInfo = new EitherTypeInfo<>( ValueTypeInfo.LONG_VALUE_TYPE_INFO, ValueTypeInfo.DOUBLE_VALUE_TYPE_INFO); EitherSerializer<LongValue, DoubleValue> eitherSerializer = (EitherSerializer<LongValue, DoubleValue>) eitherTypeInfo.createSerializer(new ExecutionConfig()); LongValue lv = new LongValue(); DoubleValue dv = new DoubleValue(); Either<LongValue, DoubleValue> left = Left(lv); Either<LongValue, DoubleValue> right = Right(dv); // the first copy creates a new instance of Left Either<LongValue, DoubleValue> copy0 = eitherSerializer.copy(left, right); // then the cross-references are used for future copies Either<LongValue, DoubleValue> copy1 = eitherSerializer.copy(right, copy0); Either<LongValue, DoubleValue> copy2 = eitherSerializer.copy(left, copy1); // validate reference equality assertSame(right, copy1); assertSame(copy0, copy2); // validate reference equality of contained objects assertSame(right.right(), copy1.right()); assertSame(copy0.left(), copy2.left()); }
@Test public void testSerializeIndividually() throws IOException { EitherTypeInfo<LongValue, DoubleValue> eitherTypeInfo = new EitherTypeInfo<>( ValueTypeInfo.LONG_VALUE_TYPE_INFO, ValueTypeInfo.DOUBLE_VALUE_TYPE_INFO); EitherSerializer<LongValue, DoubleValue> eitherSerializer = (EitherSerializer<LongValue, DoubleValue>) eitherTypeInfo.createSerializer(new ExecutionConfig()); LongValue lv = new LongValue(); DoubleValue dv = new DoubleValue(); Either<LongValue, DoubleValue> left = Left(lv); Either<LongValue, DoubleValue> right = Right(dv); TestOutputView out = new TestOutputView(); eitherSerializer.serialize(left, out); eitherSerializer.serialize(right, out); eitherSerializer.serialize(left, out); TestInputView in = out.getInputView(); // the first deserialization creates a new instance of Left Either<LongValue, DoubleValue> copy0 = eitherSerializer.deserialize(right, in); // then the cross-references are used for future copies Either<LongValue, DoubleValue> copy1 = eitherSerializer.deserialize(copy0, in); Either<LongValue, DoubleValue> copy2 = eitherSerializer.deserialize(copy1, in); // validate reference equality assertSame(right, copy1); assertSame(copy0, copy2); // validate reference equality of contained objects assertSame(right.right(), copy1.right()); assertSame(copy0.left(), copy2.left()); }
@Override public final Message next() { if (first != null) { Message toReturn = first; first = null; return toReturn; } return this.source.next().f1.right(); }
@Override public final Message next() { if (first != null) { Message toReturn = first; first = null; return toReturn; } return this.source.next().f1.right(); }
@Override public final Message next() { if (first != null) { Message toReturn = first; first = null; return toReturn; } return this.source.next().f1.right(); }
public void flatMap(Either<Vertex<K, VV>, Tuple2<K, Message>> value, Collector<Tuple2<K, Either<NullValue, Message>>> out) { if (value.isRight()) { Tuple2<K, Message> message = value.right(); outTuple.f0 = message.f0; outTuple.f1 = Either.Right(message.f1); out.collect(outTuple); } } }
public void flatMap(Either<Vertex<K, VV>, Tuple2<K, Message>> value, Collector<Tuple2<K, Either<NullValue, Message>>> out) { if (value.isRight()) { Tuple2<K, Message> message = value.right(); outTuple.f0 = message.f0; outTuple.f1 = Either.Right(message.f1); out.collect(outTuple); } } }
public void flatMap(Either<Vertex<K, VV>, Tuple2<K, Message>> value, Collector<Tuple2<K, Either<NullValue, Message>>> out) { if (value.isRight()) { Tuple2<K, Message> message = value.right(); outTuple.f0 = message.f0; outTuple.f1 = Either.Right(message.f1); out.collect(outTuple); } } }
@Override public void flatMap(Either<Tuple2<Map<String, List<T>>, Long>, Map<String, List<T>>> value, Collector<Either<L, R>> out) throws Exception { if (value.isLeft()) { Tuple2<Map<String, List<T>>, Long> timeout = value.left(); patternFlatTimeoutFunction.timeout(timeout.f0, timeout.f1, new LeftCollector<>(out)); } else { patternFlatSelectFunction.flatSelect(value.right(), new RightCollector(out)); } }
@Override public void serialize(Either<L, R> record, DataOutputView target) throws IOException { if (record.isLeft()) { target.writeBoolean(true); leftSerializer.serialize(record.left(), target); } else { target.writeBoolean(false); rightSerializer.serialize(record.right(), target); } }
@Override public Either<L, R> map(Either<Tuple2<Map<String, List<T>>, Long>, Map<String, List<T>>> value) throws Exception { if (value.isLeft()) { Tuple2<Map<String, List<T>>, Long> timeout = value.left(); return Either.Left(patternTimeoutFunction.timeout(timeout.f0, timeout.f1)); } else { return Either.Right(patternSelectFunction.select(value.right())); } } }
@Override public void serialize(Either<L, R> record, DataOutputView target) throws IOException { if (record.isLeft()) { target.writeBoolean(true); leftSerializer.serialize(record.left(), target); } else { target.writeBoolean(false); rightSerializer.serialize(record.right(), target); } }
@Override public Either<L, R> copy(Either<L, R> from) { if (from.isLeft()) { L left = from.left(); L copyLeft = leftSerializer.copy(left); return Left(copyLeft); } else { R right = from.right(); R copyRight = rightSerializer.copy(right); return Right(copyRight); } }