Messagewall filters at the mailserver level, and drops control connections (with a 552 error) when certain words, headers, mailers, relays, viruses, etc appear. It's a fairly static beast, though. Other than the occasional addition to the small list of common words, it doesn't change processing much.
SpamAssasin trains using the mail that is already on your system, and uses that to assume whether and e-mail is spam or not. It is way more dynamic, and because of this, it requires a bit of hand-holding... This *is* the more accurate of the two. It just depends on how much effort you want to put in.
They are two different beasts. While it's easy to look at it as an "or" question, the overhead on messagewall is small enough that "both" can be an option. Messagewall on a P166 debian machine is filtering a schools' Exchange servers (1000+ students)
Craig F.
PS Yes I am a slight bit biased, as I released the MessageWall e-smith contrib to go with the messagewall RPM of Charlie Brady's.

I still think "both" could still be an option.