@Override public void write(DataOutput out) throws IOException { out.writeInt(edgeMap.size()); for (Long2DoubleMap.Entry entry : edgeMap.long2DoubleEntrySet()) { out.writeLong(entry.getLongKey()); out.writeDouble(entry.getDoubleValue()); } }
@Override public Iterator<MutableEdge<LongWritable, DoubleWritable>> mutableIterator() { return new Iterator<MutableEdge<LongWritable, DoubleWritable>>() { /** * Wrapped map iterator. * Note: we cannot use the fast iterator in this case, * because we need to call setValue() on an entry. */ private final ObjectIterator<Long2DoubleMap.Entry> mapIterator = edgeMap.long2DoubleEntrySet().iterator(); /** Representative edge object. */ private final LongDoubleHashMapMutableEdge representativeEdge = new LongDoubleHashMapMutableEdge(); @Override public boolean hasNext() { return mapIterator.hasNext(); } @Override public MutableEdge<LongWritable, DoubleWritable> next() { representativeEdge.setEntry(mapIterator.next()); return representativeEdge; } @Override public void remove() { mapIterator.remove(); } }; }
@Override public void writePartition(DataOutput out, int partitionId) throws IOException { Long2DoubleOpenHashMap partitionMap = map.get(partitionId); out.writeInt(partitionMap.size()); ObjectIterator<Long2DoubleMap.Entry> iterator = partitionMap.long2DoubleEntrySet().fastIterator(); while (iterator.hasNext()) { Long2DoubleMap.Entry entry = iterator.next(); out.writeLong(entry.getLongKey()); out.writeDouble(entry.getDoubleValue()); } }
@Override public Iterator<Edge<LongWritable, DoubleWritable>> iterator() { // Returns an iterator that reuses objects. return new UnmodifiableIterator<Edge<LongWritable, DoubleWritable>>() { /** Wrapped map iterator. */ private final ObjectIterator<Long2DoubleMap.Entry> mapIterator = edgeMap.long2DoubleEntrySet().fastIterator(); /** Representative edge object. */ private final ReusableEdge<LongWritable, DoubleWritable> representativeEdge = EdgeFactory.createReusable(new LongWritable(), new DoubleWritable()); @Override public boolean hasNext() { return mapIterator.hasNext(); } @Override public Edge<LongWritable, DoubleWritable> next() { Long2DoubleMap.Entry nextEntry = mapIterator.next(); representativeEdge.getTargetVertexId().set(nextEntry.getLongKey()); representativeEdge.getValue().set(nextEntry.getDoubleValue()); return representativeEdge; } }; }