Java编写的Spark ALS协同过滤推荐算法的源代码能共享一下

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: Java编写的Spark ALS协同过滤推荐算法的源代码能共享一下
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.mllib.recommendation.ALS;
import org.apache.spark.mllib.recommendation.MatrixFactorizationModel;
import org.apache.spark.mllib.recommendation.Rating;
import scala.Tuple2;
public class myAls {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
SparkConf conf=new SparkConf().setAppName("als").setMaster("local");
JavaSparkContext sc=new JavaSparkContext(conf);
JavaRDD<String> con=sc.textFile("file:///home/gyq/下载/spark-2.3.2-bin-hadoop2.7/data/mllib/als/sample.data");
JavaRDD<Rating> ratings=con.map(f->{
  return new Rating(
      new Integer(f.split("::")[0]),
      new Integer(f.split("::")[1]),
      new Double(f.split("::")[2]));
});//数据转换为javardd三元组
JavaRDD<Rating>[] rr=ratings.randomSplit(new double[]{0.3,0.7});
MatrixFactorizationModel model=ALS.train(rr[0].rdd(), 15, 10);//生成模型
JavaRDD<Tuple2<Object,Object>> up =rr[1].map(f->{//取0.7的数据要预测的用户和产品ID
  return new Tuple2<>(f.user(),f.product());
});
JavaPairRDD<String,Double> pupr= model.predict(up.rdd()).toJavaRDD().mapToPair(f->{
  return new Tuple2<String,Double>(f.user()+","+f.product(),f.rating());//用0.7的数据去预测得到一个键值对
});
//pupr.foreach(f->System.out.println(f+"gg"));
JavaPairRDD<String,Double> upr=rr[1].mapToPair(f->{//原来0.7的数据转化为键值对
  return new Tuple2<String,Double>(f.user()+","+f.product(),f.rating());
});
//upr.foreach(f->System.out.println(f+"ss"));
JavaPairRDD<String,Tuple2<Double,Double>> mm=upr.join(pupr);
//输出格式为((用户,项目),(预测评分,实际评分)) 
//mm.foreach(f->System.out.println(f+"qq"));
//model.save(sc.sc(),"file:///home/gyq/下载/spark-2.3.2-bin-hadoop2.7/data/mllib/als/myals");
JavaPairRDD<String,Tuple2<Double,Double>> recom=mm.filter(f->{
  double f2_2=f._2._2;
  double f2_1=f._2._1;
  int a=(int)f2_1;
  int b=(int)f2_2;
  if (a==b){
      return true;}
  else
    return false;
});
double count=recom.count();
double counts=mm.count();
double accur=count/counts;
System.out.println("count="+count);
System.out.println("counts="+counts);
System.out.println("accur="+accur);
sc.stop();
  }
}

数据类似这种:用户 产品  评分  时间戳


6.1.png


利用自带的函数:

ALS.train(data,rank,iterations,lambda)


各参数意义:

ALS.train(数据,维度,迭代次数,正则化参数)

相关文章
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
1060 1
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
|
机器学习/深度学习 搜索推荐 算法
协同过滤算法
协同过滤算法
2119 0
|
存储 分布式计算 算法
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
大数据-106 Spark Graph X 计算学习 案例:1图的基本计算、2连通图算法、3寻找相同的用户
467 0
|
缓存 安全 Java
【高薪程序员必看】万字长文拆解Java并发编程!(3-1):并发共享问题的解决与分析
活锁:多个线程相互影响对方退出同步代码块的条件而导致线程一直运行的情况。例如,线程1的退出条件是count=5,而线程2和线程3在其代码块中不断地是count进行自增自减的操作,导致线程1永远运行。内存一致性问题:由于JIT即时编译器对缓存的优化和指令重排等造成的内存可见性和有序性问题,可以通过synchronized,volatile,并发集合类等机制来解决。这里的线程安全是指,多个线程调用它们同一个实例的方法时,是线程安全的,但仅仅能保证当前调用的方法是线程安全的,不同方法之间是线程不安全的。
241 0
|
Java 程序员
【高薪程序员必看】万字长文拆解Java并发编程!(3-2):并发共享问题的解决与分析
wait方法和notify方法都是Object类的方法:让当前获取锁的线程进入waiting状态,并进入waitlist队列:让当前获取锁的线程进入waiting状态,并进入waitlist队列,等待n秒后自动唤醒:在waitlist队列中挑一个线程唤醒:唤醒所有在waitlist队列中的线程它们都是之间协作的手段,只有拥有对象锁的线程才能调用这些方法,否则会出现IllegalMonitorStateException异常park方法和unpark方法是LockSupport类中的方法。
245 0
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
392 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
1316 7
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)