Hi Stuart, Thanks for the link Relating to the hadoop code I posted above, I got it to compile by putting the code under a namespace and changing the class names appropriately , but still I have no clue as to why the code didn't work without the namespace.
I'll defenitely check the link though, thks. regards, rdsr Here's the code with the modification (ns com.rdsr.maxt (:gen-class) (:import [org.apache.hadoop.io IntWritable Text] [org.apache.hadoop.fs Path] [org.apache.hadoop.mapred JobConf JobClient FileInputFormat FileOutputFormat Mapper Reducer MapReduceBase]) (:use [clojure.contrib.str-utils :only (re-split)])) (gen-class :name com.rdsr.mapper :extends org.apache.hadoop.mapred.MapReduceBase :implements [org.apache.hadoop.mapred.Mapper] :prefix "m-") (defn m-map [this key value output-collector reporter] (let [line (str value) year (subs line 15 19) air-temperature (if (= (nth line 87) \+) (Integer/parseInt (subs line 88 92)) (Integer/parseInt (subs line 87 92))) quality (subs line 92 93)] (if (and (not (= air-temperature 9999)) (re-matches #"[01459]" quality)) (.collect output-collector (Text. year) (IntWritable. air-temperature))))) (gen-class :name com.rdsr.reducer :extends org.apache.hadoop.mapred.MapReduceBase :implements [org.apache.hadoop.mapred.Reducer] :prefix "r-") (defn r-reduce [this key values output-collector reporter] (let [values-seq (iterator-seq values)] (.collect output-collector key (apply max (map (fn [n] (.get n)) values-seq))))) (defn -main [& args] (let [conf (JobConf. com.rdsr.maxt)] (doto conf (.setJobName "Max temperature") (.setMapperClass com.rdsr.mapper) (.setReducerClass com.rdsr.reducer) (.setOutputKeyClass Text) (.setOutputValueClass IntWritable)) (FileInputFormat/addInputPath conf (Path. (first args))) (FileOutputFormat/setOutputPath conf (Path. (second args))) (JobClient/runJob conf))) (compile 'com.rdsr.maxt) On Mon, Jul 27, 2009 at 9:46 PM, Stuart Sierra <the.stuart.sie...@gmail.com>wrote: > > Hi rdsr, > > The problem is that you're trying to use the "maxtemperature" as a > class name before it's finished compiling. To work around that, use > (Class/forName "maxtemperature") instead. > > You can also see my (very task-specific) Hadoop/Clojure integration at > <http://tinyurl.com/mqv2os> > and <http://tinyurl.com/lznlg2>. > > -SS > > > On Jul 27, 4:55 am, RD <rdsr...@gmail.com> wrote: > > Hi all, > > I'm having trouble converting the basic hadoop example to clojure. > > Here's my code. > > > > (ns maxtemperature > > (:gen-class) > > (:import [org.apache.hadoop.io IntWritable Text] > > [org.apache.hadoop.mapred > > JobConf JobClient > > FileInputFormat FileOutputFormat > > Mapper Reducer MapReduceBase]) > > (:use [clojure.contrib.str-utils :only (re-split)])) > > > > (gen-class > > :name mapper > > :extends org.apache.hadoop.mapred.MapReduceBase > > :implements [org.apache.hadoop.mapred.Mapper] > > :prefix "m-") > > > > (defn m-map [this key value output-collector reporter] > > (let [line (str value) > > year (subs line 15 19) > > air-temperature (if (= (nth line 87) \+) > > (Integer/parseInt (subs line 88 92)) > > (Integer/parseInt (subs line 87 92))) > > quality (subs line 92 93)] > > (if (and (not (= air-temperature 9999)) > > (re-matches quality "[01459]")) > > (.collect output-collector (Text. year) (IntWritable. > > air-temperature))))) > > > > (gen-class > > :name reducer > > :extends org.apache.hadoop.mapred.MapReduceBase > > :implements [org.apache.hadoop.mapred.Reducer] > > :prefix "r-") > > > > (defn r-reduce [this key values output-collector] > > (.collect output-collector key (apply max values))) > > > > (defn -main [s] > > (let [conf (JobConf. maxtemperature) > > args (re-split " +" s 2)] > > (doto conf > > (.setJobName "Max temperature") > > (.setMapperClass mapper) > > (.setReducerClass reducer) > > (.setOutputKeyClass Text) > > (.setOutputValueClass IntWritable)) > > (FileInputFormat/addInputPath conf (first args)) > > (FileOutputFormat/setOutputPath conf (second args)) > > (.runJob JobClient conf))) > > > > (compile 'maxtemperature) > > > > The problem is that, the compilation step fails when it encounters the > > maxtemperature in the main function. > > Without the main function the code works fine and even the compilation > > succeeds. I can't figure out what's wrong. > > Greatly appreciate help on this. > > > > thanks, > > rdsr. > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---