Ok, it ran, jars required are Mahout 0.5-*, Hadoop 1.01-*, commons -configuration 1.8, and Jackson-*-1.9.6.

> Hi,
> I just bought MIA, and ran into an exception at
> the kmeans example in chapter 7.
> I am using hadoop-core-1.0.0.jar.
> At the line: while (reader.next(key, value)){
> Exception in thread "main" java.io.IOException: wrong
> value class: 0.0: null is not class
> org.apache.mahout.clustering.WeightedPropertyVectorWri
> table
> at
> t
> org.apache.hadoop.io.SequenceFile$Reader.next(Sequence
> File.java:1932)
> at
> t
> SimpleKMeansClustering.main(SimpleKMeansClustering.jav
> a:96)
> Any ideas why this is occurring?
> Thanks

I got the same problem using the code from the downloaded source. Then I reset the external jars in Eclipse to use Mahout 0.5 and got a java.lang.ClassNotFoundException: org.apache.commons.configuration.Configuration exception. Then I switched back to Hadoop 0.23.1. Same exception. Then I added commons-configuration-1.8 to the external jars. It now throws a class not found for org/apache/hadoop/security/authentication/util/KerberosName.

Is there a pair of revs of Hadoop and Mahout that work together?

Sometimes you use the postfixed ? in the sense of a boolean function. Other times you use it as a regex marker indicating that the symbol is optional. You might want to point out the difference.

p45 - finally-clause is optional

The general form of using try/catch/finally is straightforward –
(try expr* catch-clause* finally-clause?)

p48 -- alternative is optional, in an if form

(if test consequent alternative?)
(if-not test consequent alternative?)

p50 - is-member is logical

(if (and (is-member? user) (has-special-status? user))
(welcome-warmly user))
p53 We could use the looking construct -- ought to be looping construct

p64 keep code organized by dividing it up into logical modulesar. -- ought to be modules

p 54 (defn find-daily-totals [start-date end-date]
(let [all-dates (dates-between start-date end-date)]
(map find-total-expenses all-dates)))

Here, the last line is where map collects the values got from calling find-dailytotals
on each date in all-dates.

--find-daily-totals isn't in the code, find-total-expenses is.
Concur with the growing examples comments. A progressive example would be useful. For adults to learn effectively they have to do something. Programming cannot be learned with the eyes and ears, you must use your fingers.

My difficulty with all of the Clojure books (Practical, Programming, Joy of and in Action) is that they are about the language and not about the reader. That is, the chunks of the language are presented without a unifying context, so the reader (I) have to remember all of the pieces without a framework to put it into. I am not a Lisp hacker, but I have written production code in BAL, Fortran, COBOL, PL/I, Pascal, Perl, Python, Jython, Java, XSLT ... But I am also doing other things.

I have also spent about 10 years teaching Java and J2EE and related technologies. This book (actually all of them) is impossible to teach from.

If your target audience includes the Java guys who recognize that a way out of the concurrent/multi-threaded trap is probably functional, and may be Clojure; then you need to present this in a pattern that the typical professional can use. </rant>

I like this book the best so far.
and disciple).

Probably ought to be discipline