#创建项目目录
在Linux终端中,使用如下命令创建项目目录并完成初始化:
$ cd ~ #进入当前Linux用户的主目录 $ mkdir mysparkapp #创建一个目录 $ cd mysparkapp $ npm init |
在输入初始化项目命令“npm init”后,终端会提示输入项目的相关信息,并自动把这些信息记录在package.json中。如果想进行快捷开发,不想手动输入项目信息,只需要一直按“Enter”键即可,接受默认的自动配置。
#安装相关模块
在Linux终端中继续如下命令来安装Express、jade和body-parser模块:
cd ~/mysparkapp $ npm install express --save #save前面是两个英文短横线 $ npm install jade --save #save前面是两个英文短横线 $ npm install body-parser --save #save前面是两个英文短横线 $ npm install mysql -save |
通过上面命令安装的模块,都会放在当前项目文件夹下的node_modules文件夹下,并更新到package.json文件中。Node.js引用该模块的时候,会自动从node_modules文件夹下寻找模块。
#创建服务器
在mysparkapp项目目录中,创建一个名为index.js的文件,这个文件是整个网页应用的入口,该文件的内容如下:
const express = require('express') const bodyParser = require('body-parser') const spawnSync = require('child_process').spawnSync
const app = express();
// 设置模板引擎 app.set('views','./views') app.set('view engine', 'jade') // 添加body-parser解析post过来的数据 app.use(bodyParser.urlencoded({extended: false})) app.use(bodyParser.json())
app.get('/', function (req, res) { res.render('index', {title: '电影推荐系统', message: '厦门大学数据库实验室!'}) })
app.post('/',function(req, res){ const path = req.body.path.trim() || '/input_spark' const myRatings = req.body.myRatings.trim() || '~/Downloads/personalRatings.dat' const bestRank = req.body.bestRank.trim() || 10 const bestLambda = req.body.bestLambda.trim() || 5 const bestNumIter = req.body.bestNumIter.trim() || 10 let spark_submit = spawnSync('/usr/local/spark/bin/spark-submit',['--class', 'recommend.MovieLensALS',' ~/IdeaProjects/Spark_Recommend/out/artifacts/Spark_Recommend_jar/Spark_Recommend.jar', path, myRatings, bestRank, bestLambda, bestNumIter],{ shell:true, encoding: 'utf8' }) res.render('index', {title: '电影推荐系统', message: '厦门大学数据库实验室!', result: spark_submit.stdout}) })
const server = app.listen(3000, function () { const host = server.address().address; const port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port); }); |
上面的代码用于启动一个HTTP服务器,并监听从 3000 端口进入的所有连接请求。
#添加模板文件
在当前项目目录下添加名称为“views”的子目录,并在views目录下添加一个Jade模板文件index.jade,具体方法是,在Linux终端中输入如下命令:
$ cd ~/mysparkapp #设置当前目录
$ mkdir views #创建一个views目录
$ cd views
$ vim index.jade #使用vim编辑器新建一个index.jade文件
在index.jade文件中输入如下信息:
html head title!= title body h1!= message form(action='/', method='post') p 请输入建模的相关信息 table(border=0) tr td 样本数据的路径(默认为/input_spark) td input(style='width:350px',placeholder='/input_spark',name='path') tr td 用户评分数据的路径(默认为~/Downloads/personalRatings.dat) td input(style='width:350px',placeholder='~/Downloads/personalRatings.dat ',name='myRatings') tr td 引语义因子: td input(placeholder='10',type='number',min='8',max='12',name='bestRank') tr td 正则化参数: td input(placeholder='5',type='number',min='0',max='10',step='0.1',name='bestLambda') tr td 迭代次数: td input(placeholder='10',type='number',min='10',max='20',name='bestNumIter') input(type='submit') br textarea(rows='20', cols='40')!=result |
保存该文件并退出vim编辑器。
#在网页中调用程序并展现结果
在Linux终端中输入如下命令启动该HTTP服务器:
|
在Linux系统中打开一个浏览器,再次访问网址“localhost:3000”,会出现如下图所示的网页:
因为代码中设置了用户评分数据的路径为~/Downloads下,所以将movie_recommend文件夹下的personalRatings.dat复制到~/Downloads
单击“submit Query”按钮,运行几分钟后,可得到下图所示结果: