基于Spark的电影推荐系统(推荐系统~6)

第四部分-推荐系统-实时推荐之实时数据加工

  • 把测试集(30%总数据)的数据 ,怼到 Kafka 消息队列里

前置准备

Kafka系列一之架构介绍和安装
Kafka系列三之单节点多Broker部署

启动Kafka

[root@hadoop001 ~]# nohup kafka-server-start.sh $KAFKA_HOME/config/server-1.properties &
[1] 3126
[root@hadoop001 ~]# nohup: 忽略输入并把输出追加到"nohup.out"

[root@hadoop001 ~]# nohup kafka-server-start.sh $KAFKA_HOME/config/server-2.properties &
[2] 3526
[root@hadoop001 ~]# nohup: 忽略输入并把输出追加到"nohup.out"

[root@hadoop001 ~]# 
[root@hadoop001 ~]# 
[root@hadoop001 ~]# nohup kafka-server-start.sh $KAFKA_HOME/config/server-3.properties &
[3] 3895
[root@hadoop001 ~]# nohup: 忽略输入并把输出追加到"nohup.out"

Kafka常用命令

kafka-topics.sh --zookeeper hadoop001:2181 --create --replication-factor 3 --partitions 1  --topic movie_topic 

kafka-topics.sh --describe --zookeeper hadoop001:2181 --topic movie_topic 


kafka-console-producer.sh --broker-list hadoop001:9095 --topic movie_topic

kafka-console-consumer.sh --zookeeper hadoop001:2181 --topic movie_topic

当然 --help 最好使

在这里插入图片描述

KAFKA 其实特别重要,后面再花时间好好研究研究

开始Coding:

步骤一: 继续在前面的项目中,新建包streaming,新建KafkaProducer

package com.csylh.recommend.streaming

import java.util.Properties

import com.csylh.recommend.config.AppConf
import org.apache.kafka.clients.producer._
import org.apache.spark.sql.Dataset

/**
  * Description: 测试集(30%总数据)的数据  ,怼到 Kafka 消息队列里
  *
  *
  * @Author: 留歌36
  * @Date: 2019/10/18 10:17
  */
object KafkaProducer extends AppConf {
  def main(args: Array[String]) {
    // 如果数据不加 limit限制,会出现OOM错误
    val testDF = spark.sql("select * from testData limit 10000")
    val props = new Properties()
    // 指定kafka的 ip地址:端口号
    props.put("bootstrap.servers", "hadoop001:9093,hadoop001:9094,hadoop001:9095")
    // 配置可以设定发送消息后是否需要Broker端返回确认,有"0","1","all"
    //    props.put("acks", "all")
    //    props.put("retries", "0")
    //    props.put("batch.size", "16384")
    //    props.put("linger.ms", "1")
    //    props.put("buffer.memory", "33554432")
    // 设定ProducerRecord发送的key值为String类型
    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
    // 设定ProducerRecord发送的value值为String类型
    props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")

    val topic = "movie_topic"
    import spark.implicits._
    val testData:Dataset[(String,String)] = testDF.map(x => (topic, x.getInt(0).toString() + "|" + x.getInt(1).toString + "|" + x.getDouble(2).toString()))
    val producer = new KafkaProducer[String, String](props)

    // 如果服务器内存不够,会出现OOM错误
    val messages = testData.toLocalIterator

    while (messages.hasNext) {
      val message = messages.next()
      val record = new ProducerRecord[String, String](topic, message._1, message._2)
      println(record)
      producer.send(record)
      // 延迟10毫秒
      Thread.sleep(1000*5)
    }
    producer.close()


    // TODO... for循环会有序列化的问题
    //for (x <- testData) {
    //  val message = x
    //  val record = new ProducerRecord[String, String]("test", message._1, message._2)
    //  println(record)
    //  producer.send(record)
    //  Thread.sleep(1000)
    //}

    // 不用testData.map或者foreach,因为这两种方法会让你的数据做分布式计算,在计算时,处理数据是无序的。
    // testData.foreach
  }

}

步骤二:将创建的项目进行打包上传到服务器
~~mvn clean package -Dmaven.test.skip=true~~ 

步骤三:编写shell 执行脚本

```powershell
[root@hadoop001 ml]# vim kafkaProducer.sh 
export HADOOP_CONF_DIR=/root/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop

$SPARK_HOME/bin/spark-submit \
--class com.csylh.recommend.streaming.KafkaProducer \
--master spark://hadoop001:7077 \
--name KafkaProducer \
--driver-memory 2g \
--executor-memory 1g \
--total-executor-cores 1 \
--jars /root/app/kafka_2.11-1.1.1/libs/kafka-clients-1.1.1.jar \
/root/data/ml/movie-recommend-1.0.jar

步骤四:执行 sh kafkaProducer.sh 即可
在这里插入图片描述
保证控台台能不断的消费到数据。

有任何问题,欢迎留言一起交流~~
更多文章:基于Spark的电影推荐系统:https://blog.csdn.net/liuge36/column/info/29285

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Spark电影推荐系统是使用Spark框架来构建和训练的推荐系统,它可以根据用户的历史行为和电影的属性,为用户推荐可能感兴趣的电影。下面是一个简单的步骤来构建基于Spark电影推荐系统: 1. 数据准备:收集电影数据集,包括用户行为数据和电影属性数据。用户行为数据可以包括用户对电影的评分、观看历史、收藏等信息,电影属性数据可以包括电影的类型、导演、演员等信息。 2. 数据预处理:使用Spark的DataFrame API加载和处理数据。对于用户行为数据,可以进行数据清洗、去重、转换等操作;对于电影属性数据,可以进行特征提取、编码等操作。 3. 特征工程:将用户行为数据和电影属性数据转换为特征向量。可以使用特征提取方法如TF-IDF、Word2Vec等,将电影和用户表示为稠密向量。 4. 模型训练:使用Spark的机器学习库(如MLlib)训练推荐模型。常用的推荐模型包括协同过滤、基于内容的推荐、矩阵分解等。可以使用交叉验证和超参数调优来选择最佳模型。 5. 推荐生成:使用训练好的模型对新用户进行推荐。可以根据用户的特征向量和电影的特征向量计算用户与电影之间的相似度,并为用户推荐相似度高的电影。 6. 评估和优化:通过离线评估指标(如准确率、召回率等)来评估推荐系统的性能,并进行优化。可以尝试不同的模型算法、特征工程方法和参数设置来提高推荐效果。 请注意,以上只是一个基本的框架,实际构建电影推荐系统还需要根据具体需求和数据进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值