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
-~----------~----~----~----~------~----~------~--~---

Reply via email to