I'm pretty sure that user id's now need to be longs.
On Oct 12, 2009, at 4:28 PM, Larry Homes wrote:
Hello,
I am trying to just build a simple Recommender system using a
SlopeOneRecommender. I used the sample table schema and data found
in the
javadoc here:
http://lucene.apache.org/mahout/javadoc/core/org/apache/mahout/cf/taste/impl/model/jdbc/MySQLJDBCDataModel.html
.
Here is a select * from the table:
mysql> select * from taste_preferences;
+---------+---------+------------+
| user_id | item_id | preference |
+---------+---------+------------+
| abc | 123 | 0.9 |
| abc | 456 | 0.1 |
| def | 123 | 0.2 |
| def | 789 | 0.3 |
+---------+---------+------------+
4 rows in set (0.00 sec)
When I try to run the recommender I get this error:
java.util.NoSuchElementException: Can't retrieve more due to
exception: java.sql.SQLException: Invalid value for getLong() - 'abc'
org.apache.mahout.cf.taste.impl.model.jdbc.AbstractJDBCDataModel
$ResultSetIDIterator.nextLong(AbstractJDBCDataModel.java:684)
org.apache.mahout.cf.taste.impl.recommender.slopeone.MemoryDiffStorage.buildAverageDiffs
(MemoryDiffStorage.java:220)
org.apache.mahout.cf.taste.impl.recommender.slopeone.MemoryDiffStorage
.<init>(MemoryDiffStorage.java:115)
org.apache.mahout.cf.taste.impl.recommender.slopeone.SlopeOneRecommender
.<init>(SlopeOneRecommender.java:63)
Recommend.doGet(Recommend.java:67)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Here is the code:
//Bunch of imports here
public class Recommend extends HttpServlet
{
private static final long serialVersionUID = 1L;
DataSource ds = null;
public void init()
{
String DATASOURCE =
getServletContext().getInitParameter("DataSource");
try
{
super.init();
if ((ds = (DataSource) (new
InitialContext().lookup(DATASOURCE))) == null)
throw new ServletException("Error configuring
DataSource.");
}
catch (NamingException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ServletException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request,
HttpServletResponse
response) throws ServletException, IOException
{
PrintWriter pw = response.getWriter();
DataModel model = new MySQLJDBCDataModel(ds,
"taste_preferences",
"user_id", "item_id", "preference");
// Make a weighted slope one recommender
Recommender recommender;
Recommender cachingRecommender;
try
{
recommender = new SlopeOneRecommender(model);
cachingRecommender = new CachingRecommender(recommender);
List<RecommendedItem> l = cachingRecommender.recommend
(123, 2);
Iterator<RecommendedItem> i = l.iterator();
while(i.hasNext())
{
pw.println(i.next().getItemID());
}
} catch (TasteException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request,
HttpServletResponse
response) throws ServletException, IOException
{
}
}
If you need any other data, feel free to ask.
Thanks
--------------------------
Grant Ingersoll
http://www.lucidimagination.com/
Search the Lucene ecosystem (Lucene/Solr/Nutch/Mahout/Tika/Droids)
using Solr/Lucene:
http://www.lucidimagination.com/search