推荐系统实践2---修改后的电影推荐系统(基于MLlib、SparkSQL、MYSQL、HDFS)

之前写的太简单,这次加点存储和修改点代码来做次比较完善的推荐流程,但是只是基于离线,没有写实时模块,大家可以关注,接下来有时间会写到

代码如下:

package mllib

import java.text.SimpleDateFormat
import java.util.Date

import org.apache.log4j.{Level, Logger}
import org.apache.spark.mllib.recommendation.{ALS, MatrixFactorizationModel, Rating}
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkContext, SparkConf}
import util.HbaseUtils
import scala.io.Source
import java.util.ArrayList
import scopt.OptionParser


/**
  * Created by 汪本成 on 2016/6/23.
  */
object movieALS {

  val numRecommender = 10

  def main(args: Array[String]) {

    //屏蔽不必要的日志显示在终端上
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    Logger.getLogger("org.apache.eclipse.jetty.server").setLevel(Level.OFF)

    //创建入口对象
    val conf = new SparkConf().setAppName("moviesALS").setMaster("local[5]")
    val sc = new SparkContext(conf)


    //评分训练总的数据集,元祖格式
    val ratingList_Tuple = sc.textFile("hdfs://master:9000/user/spark/test/ratings.dat").map{
      lines =>
        val fields = lines.split("::")
        //timespan这列对10取余,是评分一列出现的数字都是一个0~9的数字
        (fields(0).toInt, fields(1).toInt, fields(2).toDouble, fields(3).toLong % 10)
    }

    //评分训练的总数据集,模拟键值对的形式,键是0-9的一个数字,值是Rating类型
    val ratingsTrain_KV = ratingList_Tuple.map(x => (x._4, Rating(x._1, x._2, x._3)))
    //打印从rating.dat中,我们从多少个用户和电影之中得到多少评分记录
    println("统计出" + ratingsTrain_KV.count() + "条评价来自" + ratingsTrain_KV.map(_._2.user).distinct().count() + "部电影里")

    //我的评分数据,RDD[Rating]格式
    val myRatedData_Rating = sc.textFile("hdfs://master:9000/user/spark/test/test.dat").map{
      lines =>
        val fields = lines.split("::")
        Rating(fields(0).toInt, fields(1).toInt, fields(2).toDouble)
    }

    //从训练总数据分出80%作为训练集,20%作为验证集,20%作为测试集,前面的将timespan10做取余操作就是为了从总数据集分出三部分
    //设置分区数
    val numPartitions = 3
    //将键的数值小于8的作为训练数据
    val traingData_Rating = ratingsTrain_KV.filter(_._1 < 8).values //注意,由于原本的数据集是伪键值对形式的,而当做训练数据只需要RDD[Rating]类型的数据,即values集合
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值