This is how I managed to set up JRuby and Mahout 0.8 on Mac OSX 10.9 – Without any gems.

Part of the reason for this is jruby_mahout currently only works with Mahout 0.7, and I was too lazy and impatient to get it to work with Mahout 0.8.

I am especially excited because this I think exhibits one of the best use-cases for JRuby – Interoping with existing (awesome) Java libraries with minimum hassle.

Step 1a. Installing JRuby with rbenv

Grab the latest rbenv

> brew upgrade rbenv > brew upgrade ruby-build

Let’s pick the latest JRuby version.

> rbenv install -l | grep 'jruby'` > ... jruby-1.7.4 jruby-1.7.5 jruby-1.7.6 jruby-1.7.7 jruby-1.7.8 jruby-1.7.9 > rbenv install jruby-1.7.9

Then we switch to JRuby.

> rbenv shell jruby-1.7.9

Note that this command would swith to jruby-1.7.9 only for the current terminal window.

Step 1b. Installing JRuby with rvm

> rvm install jruby > rvm use jruby

Step 2. Installing Mahout

brew install mahout

Step 3: export the Mahout directory

In your ~/.bashrc or ~/.zshrc , add this line:

export MAHOUT_DIR="/usr/local/Cellar/mahout/0.8/"

Remember to source ~/.bashrc or source ~/.zshrc for the changes to be picked up.

To double check:

> echo $MAHOUT_DIR /usr/local/Cellar/mahout/0.8/

Step 4: Taking Mahout for a spin

Create a file data.csv and populate it with the following data:

4 1 7 2 4 4 1 4 4 3 8 1 8 3 4 5 4 6 6 6

Then create mahout_test_run.rb :

Dir . glob ( " #{ ENV [ 'MAHOUT_DIR' ] } /libexec/*.jar" ). each { | d | require d } MahoutFile = org . apache . mahout . cf . taste . impl . model . file model = MahoutFile . FileDataModel . new ( java . io . File . new ( "data.csv" )) MahoutSimilarity = org . apache . mahout . cf . taste . impl . similarity similarity = MahoutSimilarity . TanimotoCoefficientSimilarity . new ( model ) MahoutNeighborhood = org . apache . mahout . cf . taste . impl . neighborhood neighborhood = MahoutNeighborhood . NearestNUserNeighborhood . new ( 5 , similarity , model ) MahoutRecommender = org . apache . mahout . cf . taste . impl . recommender recommender = MahoutRecommender . GenericBooleanPrefUserBasedRecommender . new ( model , neighborhood , similarity ) recommendations = recommender . recommend ( 8 , 5 ) puts recommendations

Next run the script:

> ruby mahout_test_run.rb

If everything went rosy, you would get:

Jan 26, 2014 12:36:52 PM org.slf4j.impl.JCLLoggerAdapter info INFO: Creating FileDataModel for file data.csv Jan 26, 2014 12:36:52 PM org.slf4j.impl.JCLLoggerAdapter info INFO: Reading file info... Jan 26, 2014 12:36:52 PM org.slf4j.impl.JCLLoggerAdapter info INFO: Read lines: 10 [RecommendedItem[item:4, value:0.4], RecommendedItem[item:5, value:0.4], RecommendedItem[item:6, value:0.4]]

Step 5: Profit!

Thanks for reading! Go forth and build awesome recommendation systems! :)