outEdges = [Edge(tid, int(v)) for _, tid, v in lines] return (id, Vertex(id, sys.maxint, outEdges, True)) def compute(self, vs, agg, superstep): newValue = min(self.value, vs[0]) if vs else self.value if newValue != self.value: outbox = [Message(edge.target_id, newValue + edge.value) for edge in self.outEdges] else: outbox = [] return Vertex(self.id, newValue, self.outEdges, False), outbox if __name__ == '__main__': ctx = DparkContext() path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'graph.txt') lines = ctx.textFile(path).map(lambda line:line.split(' ')) vertices = lines.groupBy(lambda line:line[0]).map(to_vertex) startVertex = str(0) messages = ctx.makeRDD([(startVertex, Message(startVertex, 0))]) print 'read', vertices.count(), 'vertices and ', messages.count(), 'messages.' result = Bagel.run(ctx, vertices, messages, compute, MinCombiner(), numSplits=2) print 'Shortest path from %s to all vertices:' % startVertex for v in result.collect(): if v.value == sys.maxint: v.value = 'inf' print v.id, v.value
return (id, Vertex(id, sys.maxint, outEdges, True)) def compute(self, vs, agg, superstep): newValue = min(self.value, vs[0]) if vs else self.value if newValue != self.value: outbox = [(edge.target_id, newValue + edge.value) for edge in self.outEdges] else: outbox = [] return Vertex(self.id, newValue, self.outEdges, False), outbox if __name__ == '__main__': ctx = DparkContext() path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'graph.txt') lines = ctx.textFile(path).map(lambda line: line.split(' ')) vertices = lines.groupBy(lambda line: line[0]).map(to_vertex) startVertex = str(0) messages = ctx.makeRDD([(startVertex, 0)]) print('read', vertices.count(), 'vertices and ', messages.count(), 'messages.') result = Bagel.run(ctx, vertices, messages, compute, BasicCombiner(min), numSplits=2) print('Shortest path from %s to all vertices:' % startVertex) for id, v in result.collect(): if v.value == sys.maxint: v.value = 'inf' print(v.id, v.value)
def compute(self, vs, agg, superstep): newValue = min(self.value, vs[0]) if vs else self.value if newValue != self.value: outbox = [ SPMessage(edge.target_id, newValue + edge.value) for edge in self.outEdges ] else: outbox = [] return SPVertex(self.id, newValue, self.outEdges, False), outbox if __name__ == '__main__': ctx = DparkContext() lines = ctx.textFile('graph.txt').map(lambda line: line.split(' ')) vertices = lines.filter(lambda x: len(x) == 3).groupBy( lambda line: line[0]).map(to_vertex) messages = lines.filter(lambda x: len(x) == 2).map( lambda (vid, v): (vid, SPMessage(vid, int(v)))) print 'read', vertices.count(), 'vertices and ', messages.count( ), 'messages.' result = Bagel.run(ctx, vertices, messages, compute, MinCombiner()) startVertex = 0 print 'Shortest path from %s to all vertices:' % startVertex for v in result.collect(): if v.value == sys.maxint: v.value = 'inf' print v.id, v.value