日期:2014-05-16  浏览次数:20752 次

运行“基于 Apache Mahout 构建社会化推荐引擎”中例子遇到的问题

? ? ? ?下载了MovieSite这个包,解压导入Eclipse遇到很多问题。记录下步骤

? ? ? ?首先导入eclipse后,build path中引入的几个tomcat library路径不正确。需要根据你的tomcat路径,重新引入。还有需要下载mysql 驱动,我下载的是mysql-connector-java-5.1.10-bin.jar,导入build path。如果你是通过在eclipse中的tomcat plugin(com.sysdeo.eclipse.tomcat)来运行这个web程序,还需要将该驱动jar包拷贝一份到tomcat的lib目录下。

? ? ? ?然后修改tomcat的server.xml或者在拷贝一个context xml到conf/Catalina/localhost目录下。加入类似下面的内容

? ? <Context docBase="c:/MovieSite" path="/MovieSite" reloadable="true" >

? ? ? <Resource name="jdbc/movie" ? //要与web.xml中的<res-ref-name>一致

auth="Container"?

type="javax.sql.DataSource"?

driverClassName="com.mysql.jdbc.Driver"?

url="jdbc:mysql://192.168.21.152/movie"?

username="root" ? ? //your mysql account name

password="root" ? ? // your mysql password

maxActive="100"?

maxIdle="30"?

maxWait="10000"/>?

? ? ? </Context>

? ? ? ?然后要根据table.sql的脚步创建4个table,再将movies.dat数据导入。接着在user表中自己插入一笔数据,因为例子没提供,但后面导入ratings.dat必须要有user表的userID父键关联。所以ID号以ratings中的userID为参照。因为ratings.dat中数据较多,而你不可能将ratings中的userID一一插入到user表(除非你有兴趣或者其它工具帮您插入),所以导入ratings.dat时,会报异常,只会导入在你user表中存在的userID作父键的数据。不用太计较,能看到例子的效果就行。

? ? ? 最后启动tomcat,打开浏览器,输入http://localhost:8080/MovieSite,看到输入框,输入你的user email,密码可以不输。就可以看到内容了。

?

看到http://blog.csdn.net/softwarehe/article/details/7465151中将mahout-core-0.2换成mahout-core-0.5,问题更多,还会有代码编译错误,但也可以解决。

com.ibm.taste.example.movie.recommender包中所有代码都会提示错误,但主要是两种

一是类似ItemBasedRecommender类中的错误提示:

? ? ? ? ? The type ItemBasedRecommender must implement the inherited abstract method Recommender.recommend(long, int, IDRescorer),?

? ? ? ? ? The method recommend(long, int, IDRescorer) in the type Recommender is not applicable for the arguments (long, int,?Rescorer<Long>)

? ? ? ?遇到这种状况,就将该方法屏蔽掉,然后重新加载未实现方法,同时将调用this.recommend(long , ?howMany Rescorer<Long> )改成调用this.recommend(long , int ,IDRescorer).

二是MovieDataModel类中提示:

? ? ? ? ?The constructor MySQLJDBCDataModel(DataSource, String, String, String, String) is undefined

? ? ? ? ?先添加变量public final static String TIMESTAMP_COLUMN = "timestamp";

? ? ? ? 然后将super(lookupDataSource(dataSourceName), PERFERENCETABLE, USERID_COLUMN, ITEMID_COLUMN, PERFERENCE_COLUMN)改成super(lookupDataSource(dataSourceName), PERFERENCETABLE, USERID_COLUMN, ITEMID_COLUMN, PERFERENCE_COLUMN,TIMESTAMP_COLUMN);?

?就可以了。

?

? 解决了编译问题,运行tomcat时可能还会报异常,需要另外两个jar:guava-r03.jar,mahout-math-0.5.jar。其它步骤和mahout-core-0.2一样

?

?

?

?

?

?