(十二)使用Node.js在网页中展现结果——从0开始大数据开发实战:电影推荐系统(scala版)

#创建项目目录

在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服务器:

 cd ~/mysparkapp
$ node index.js

在Linux系统中打开一个浏览器,再次访问网址“localhost:3000”,会出现如下图所示的网页: 

因为代码中设置了用户评分数据的路径为~/Downloads下,所以将movie_recommend文件夹下的personalRatings.dat复制到~/Downloads

单击“submit Query”按钮,运行几分钟后,可得到下图所示结果:

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java大饭桶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值