Sha256: 0765969d3b9c8e63fe3c8ac09149f112316a5be3ad884f20cc2b0b8fbaa88d9e

Contents?: true

Size: 1.67 KB

Versions: 18

Compression:

Stored size: 1.67 KB

Contents

#!/usr/bin/env ruby
$: << '/home/flip/ics/wukong/lib' # ENV['WUKONG_PATH']
require 'wukong'

#
# Given an adjacency pairs (from \t to) representation of a directed graph:
#
#    1     2
#    1     7
#    2     7
#    2     9
#    7     2
#
# It produces an "adjacency list":http://en.wikipedia.org/wiki/Adjacency_list representation:
#
#    1  >   2   7
#    2  >   7   9
#    7  >   2
#    9  >
#
# and
#
#    1  <
#    2  <   1   7
#    7  <   1   2
#    9  <   2
#
# (each column is tab-separated in the actual output)
#
#
#
module Gen1HoodEdges
  class Mapper < Wukong::Streamer::Base
    def process rsrc, src, dest, *_
      src = src.to_i ; dest = dest.to_i
      yield [ src,  '>', dest ]
      yield [ dest, '<', src  ]
    end
  end

  #
  # Accumulate links onto single line.
  #
  # The reduce key is the target node and direction; we just stream through all
  # pairs for each target node and output its neighbor nodes on the same line.
  #
  # To control memory usage, we will print directly to the output (and not run
  # through the Emitter)
  #
  class Reducer < Wukong::Streamer::AccumulatingReducer
    # clear the list of incoming paths
    def start! target, dir, *args
      print target + "\t" + dir  # start line with target and list type
    end
    def accumulate target, dir, neighbor
      print "\t" + neighbor      # append neighbor to output, same line
    end
    def finalize
      puts ''                    # start new line
    end
  end

  class Script < Wukong::Script
    def default_options
      super.merge :sort_fields => 1, :partition_fields => 1
    end
  end
end

# Execute the script
Gen1HoodEdges::Script.new(
  Gen1HoodEdges::Mapper,
  Gen1HoodEdges::Reducer
  ).run

Version data entries

18 entries across 18 versions & 2 rubygems

Version Path
mrflip-wukong-0.1.0 examples/graph/adjacency_list.rb
wukong-1.5.4 examples/network_graph/adjacency_list.rb
wukong-1.5.3 examples/network_graph/adjacency_list.rb
wukong-1.5.2 examples/network_graph/adjacency_list.rb
wukong-1.5.1 examples/network_graph/adjacency_list.rb
wukong-1.5.0 examples/network_graph/adjacency_list.rb
wukong-1.4.12 examples/network_graph/adjacency_list.rb
wukong-1.4.11 examples/network_graph/adjacency_list.rb
wukong-1.4.10 examples/network_graph/adjacency_list.rb
wukong-1.4.9 examples/network_graph/adjacency_list.rb
wukong-1.4.7 examples/graph/adjacency_list.rb
wukong-1.4.6 examples/graph/adjacency_list.rb
wukong-1.4.5 examples/graph/adjacency_list.rb
wukong-1.4.2 examples/graph/adjacency_list.rb
wukong-1.4.1 examples/graph/adjacency_list.rb
wukong-1.4.0 examples/graph/adjacency_list.rb
wukong-0.1.4 examples/graph/adjacency_list.rb
wukong-0.1.1 examples/graph/adjacency_list.rb