zoukankan      html  css  js  c++  java
  • “基于 Apache Mahout 构建社会化推荐引擎”一文例子运行纪实(引用)

    这篇文章原作者不知何故,在几个关键点上一笔带过,想要让例子运行起来,得费自己好大功夫才能搞定,去年我搞好了一次,没记博客,结果服务器不知怎么原来东西没了,这次我是花了2天时间搞定的,记下来一是为自己备忘,也希望能帮助那些还在苦闷的同行者。

    1:Taste 的安装与简单的 Demo 实现

    这一部分还是写的比较好的,基本按照文档操作就能看到结果

    2:使用 Taste 构建推荐引擎实例 – 电影推荐引擎

    这一部分就比较头痛了,我也无法一一详细描述,中间有很多困难之处。

    首先从原文下载作者提供的代码,导入到eclipse,我的eclipse是Eclipse Java EE IDE for Web Developers,版本是Indigo Service Release 2,导入之后是一堆错,这个估计每个人都不一样,自己通过google应该都能解决。我的错误都是lib下的jar包引起的,参考下面:

    原文的代码使用的是mahout0.2的,这个显然太老了,我用mahout 0.5的版本替换了,从后面结果看基本无影响,但由于0.5版本有几个地方被修改了,需要修改到适应0.5版本的,到项目的属性里边修改即可。

    原来的项目和tomcat相关的几个jar包,由于新版本tomcat没有common/lib目录了,需要将这几个jar包指到正确的位置,有个包还要改名字,修改后分别是:

    TOMCAT_HOME/lib/jasper.jar,TOMCAT_HOME/lib/jsp-api.jar,TOMCAT_HOME/lib/servlet-api.jar,自己修改到对应的目录即可。

    web.xml也有编译错误,头上几行修改为:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

    这些都解决后,可以编译了,出来一堆编译错误,修改如下:

    MovieDataModel.java,添加一行public final static String TIMESTAMP_COLUMN = "timestamp";这里的timestamp对应的是数据库表里边的字段名,不能乱写,再出错的super函数最后加上一个参数TIMESTAMP_COLUMN,这个编译错误消失。

    还有个和IDRescorer相关的编译错误,由于参数类型变了,修改为正确的类型即可,实际上这一项在项目中根本没用到,改对类型就可以了。

    完成上面这些基本可以编译通过,接着出来一个新问题,项目不能导出为war

    在属性里找到project facets这一项,可以在这里将项目转化为dynamic web module,java版本要选高于1.5版本的,否则会编译出错。

    至此,项目可以放置到tomcat下webapps下了,但是由于转过来的版本打包后有些文件都没有打进去,我只好手工拷贝这些文件到解压目录,应该会有更好的方法,不过我java刚学不久,不知道怎么做,主要拷贝了web.xml,index.html

    到这一步,在浏览器里访问website:8080/MovieSite应该能看到登录页面了,但登录肯定会告诉你something wrong,是最后出大招的时候了。

    3:初始化数据库

    无法登录是因为数据库中无初始数据,需要自己加,怎么加呢?原文肯定没有了,幸好有好人写了个程序,http://www.cnblogs.com/abelstronger/articles/2093847.html

    从上面的链接下载到程序之后,需要自己编译3个程序添加数据到数据库,代码自己看,有java基础的应该很容易知道怎么做,如果DBUtils.java报getJDBCConnection找不到,加入下面代码:

    public static  Connection getJDBCConnection()
        {
            String driverClassName = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://localhost/movie";
            String username = "username";     //修改为你自己用户名
            String password = "password";      //修改为你自己密码

            Connection conn = null;

            try {
                Class.forName(driverClassName);
                conn = DriverManager.getConnection(url, username, password);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }

            return conn;
        }

        public static void closeConnection(Connection conn)
        {
            if(conn!=null)
            {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    数据库的添加和表的创建参考原文即可。

    4:数据源配置:

    修改tomcat的server.xml文件,找到<Host> ... </Host>,在</Host>之前加入:

            <Context path="/MovieSite" docBase="/usr/local/tomcat/webapps/MovieSite" debug="0" reloadable="true">
                    <Resource name="jdbc/movie" auth="Container" type="javax.sql.DataSource"
                            username="username"
                            password="password"
                            driverClassName="com.mysql.jdbc.Driver"
                            url="jdbc:mysql://localhost:3306/movie"
                            maxActive="15"
                            maxIdle="7"
                            defaultTransactionIsolation="READ_COMMITTED"
                            validationQuery="Select 1" />
            </Context>

    其中的docBase和username,password等修改为你自己对应的值,

    5:mysql驱动我用的mysql-connector-java-5.0.6-bin.jar,重启tomcat,这个时候应该可以用了,如果有问题,查看tomcat的logs目录下对应的日志tail -f catalina.out

    6:用户登录的邮件地址查找movie数据库下的users表,随便输入一个即可,一般是test****@gmail.com,其中****是1-6040的一个数字,密码不需要填

  • 相关阅读:
    HDU 3415 Max Sum of Max-K-sub-sequence 最长K子段和
    Android Fragment 真正彻底的解决(下一个)
    【数据分析面试题】一个 面试题,我的回答
    Swift初体验(两)
    MyEclipse10.0 集成 SVN
    CFileDialog 打开文件夹文件 保存文件夹文件
    基于thinkphp的uploadify上传图功能
    近20家银行手机银行签名被非法滥用风险分析
    设计模式【6】:适配器模式【接口适配】
    【学习笔记】编译原理-有限自己主动机
  • 原文地址:https://www.cnblogs.com/chenying99/p/2541167.html
Copyright © 2011-2022 走看看