Sha256: 559cf6c41377a2139dea3b32f45eb930b0640d099a47a40a3cd6d570b271a370

Contents?: true

Size: 1.45 KB

Versions: 3

Compression:

Stored size: 1.45 KB

Contents

require 'hadoop_dsl'

module HadoopDsl
  class MapRedFactory
    def self.dsl_name(script)
      HadoopDsl.read_file(script).each_line do |line|
        dsl_name = $1 if line =~ /\s*dsl\s*\(?["'](\w*)["']\)?/
        return dsl_name if dsl_name
      end
    end

    def self.require_dsl_lib(dsl_name)
      require HadoopDsl.snake_case(dsl_name)
    end
  end

  class MapperFactory < MapRedFactory
    # for cache in map loop
    @@mapper_class = nil
    def self.create(script, key, value)
      # once decide in map loop
      unless @@mapper_class
        dsl_name = self.dsl_name(script)
        require_dsl_lib(dsl_name)
        @@mapper_class = eval("HadoopDsl::#{dsl_name}::#{dsl_name}Mapper")
      end

      @@mapper_class.new(script, key, value)
    end
  end

  class ReducerFactory < MapRedFactory
    @@reducer_class = nil
    def self.create(script, key, values)
      # once decide in reduce loop
      unless @@reducer_class
        dsl_name = self.dsl_name(script)
        require_dsl_lib(dsl_name)
        @@reducer_class = eval("HadoopDsl::#{dsl_name}::#{dsl_name}Reducer")
      end

      @@reducer_class.new(script, key, values)
    end
  end

  class SetupFactory < MapRedFactory
    def self.create(script, conf)
      dsl_name = self.dsl_name(script)
      require_dsl_lib(dsl_name)
      setup_class = "HadoopDsl::#{dsl_name}::#{dsl_name}Setup" 
      eval(setup_class).new(script, conf) rescue HadoopDsl::BaseSetup.new(script, conf)
    end
  end
end

Version data entries

3 entries across 3 versions & 2 rubygems

Version Path
hadoop-rubydsl-0.0.6 lib/mapred_factory.rb
hadoop-papyrus-0.0.6 lib/mapred_factory.rb
hadoop-rubydsl-0.0.5 lib/mapred_factory.rb