Hi,

I'm trying to set a variable in my mapper class by reading an argument from
the command line and then passing the entry to the mapper from main. Is this
possible?

  public static void main(String[] args) throws Exception
  {
    JobConf conf = new JobConf(DistanceCalc2.class);
    conf.setJobName("Calculate Distances");

    conf.setOutputKeyClass(Text.class);
    conf.setOutputValueClass(DoubleWritable.class);

    conf.setMapperClass(Map.class);
    //conf.setReducerClass(Reduce.class);

    conf.setInputFormat(TextInputFormat.class);
    conf.setOutputFormat(TextOutputFormat.class);

    FileInputFormat.setInputPaths(conf, new Path(args[0]));
    FileOutputFormat.setOutputPath(conf, new Path(args[1]));

    Map.setN(args[2]);

    JobClient.runJob(conf);
  }//main


  public static class Map extends MapReduceBase
    implements Mapper<LongWritable, Text,
      Text, DoubleWritable>
        {
               ...
               private static int N;

               ...

               public void map(LongWritable key, Text value,
                 OutputCollector<Text, DoubleWritable> output,
                  Reporter reporter) throws IOException
                {
                    ....
                    dim = tokens.length / N;
                    ...
                }

               public static void setN(String newN)
               {
                  N = Integer.parseInt(newN);
               }
        }

I've tried the code above but I get an error saying that I'm dividing by
zero. Obviously, the argument I enter for N isn't being set as specified.
Erik

Reply via email to