hadoop1-商品推荐之商品关联性最简易建模1

1、如题,这是自己通过在QQ交流上得到的一个想法。

2、

数据文件 1.txt:

001={001,002,004,006,008}  003={003,002,001,009,004}

002={002,003,005,006,008,009,007}  004={004,005,006,009,008,007}

005={005,003,007,008,001,002}  006={006,001,004,009,005,008}

说明:

  1、  每一个数字代表一个商品Id

  2、  每一行中有两个商品,每个商品ID后={}内部代表的是从001这个商品直接跳转到{里面商品}的记录。商品自身属于一个跳转

如:         001——》002

001——》004

…..

得到对应的记录为:001={001,002,004,006,008}

3、每一行两个商品对应的{}相同的商品ID为表示一个关联

如:001={001,002,004,006,008}             003={003,002,001,009,004}

对应关联的有:001,002,004亦即3个关联

3、  要求reduce输出为001:003=3

  即:商品001和商品003的关联性为3

设计目的:

通过两两商品的关联性对比,得到商品的最优推荐(比较简单的啊)。

思路分析:

  1、  map端:得到商品A和商品B的ID组合为key,

同时分割行得到关联商品交集的数量作为value输出

2、reducer端原样输出,不做处理(可以使用默认的reducer)

设计代码:

  

package product;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

public class SimpleRelation {

	public static class Map extends Mapper<LongWritable, Text, Text, IntWritable>{
		private static Text k = new Text();
		private static IntWritable v = new IntWritable(0);

		protected void map(LongWritable key, Text value, Context context)
				throws java.io.IOException ,InterruptedException {
			// line demo :"001={001,002,004,006,008}\t003={003,002,001,009,004}"
			String line = value.toString();
			//分割为两个商品信息
			String[] splits = line.split("\t");
			if(splits.length != 2)
				return;
			//对每个商品信息进行分割
			String[] proc1 = splits[0].split("=");
			String[] proc2 = splits[1].split("=");

			k.set(proc1[0]+":"+proc1[0]);
			v.set(getSameNum(proc1[1],proc2[1]));

			context.write(k, v);
		};
		//取得交集的数量,此部分或可以优化
		private int getSameNum(String str1, String str2) {
			//str1 = "{001,002,004,006,008}" str2 = "{003,002,001,009,004}"
			//取交集即可。
			//取得对应的list集合,Arrays.asList返回的是固定大小的list,仅能查,不能修改,所以上面采用手工赋值的方式
			List<String> proc1 = new ArrayList<String>();
			String[] temp = str1.substring(1, str1.length()-1).split(",");
			for (String s : temp) {
				proc1.add(s);
			}
			List<String> proc2 = Arrays.asList(str2.substring(1, str2.length()-1).split(","));
			//该方法从列表中移除未包含在指定 proc2 中的所有元素。
			proc1.retainAll(proc2);
			return proc1.size();
		}
	}
	// 仅使用map即可得到解决,reducer采用系统默认的即可
	public static void main(String[] args) throws Exception {
		Configuration conf = new Configuration();
		String[] otherArgs = new GenericOptionsParser(conf,args).getRemainingArgs();
		if(otherArgs.length != 2){
			System.err.println("Usage:SimpleRelation");
			System.exit(2);
		}
		Job job = new Job(conf,"SimpleRelation");
		job.setJarByClass(SimpleRelation.class);

		job.setMapperClass(Map.class);

		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(IntWritable.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);

		FileInputFormat.addInputPath(job, new Path(args[0]));
		FileOutputFormat.setOutputPath(job, new Path(args[1]));

		System.exit(job.waitForCompletion(true) ? 0 : 1);
	}
}

程序输出:

[[email protected] ~]# hadoop dfs -cat /output/*

001:001 3

002:002 5

005:005 3

当然程序比较简单,毕竟是自己设计的,不过往下会一步步应用我们所学的。

hadoop1-商品推荐之商品关联性最简易建模1

时间: 2024-08-14 22:13:29

hadoop1-商品推荐之商品关联性最简易建模1的相关文章

hadoop1-商品推荐之商品关联性最简易建模2

1.继承自上一篇,需要参考一下,就去看看. 2.增加数据量,实现相同商品ID的依据升序输出 数据文件 1.txt: 001={001,002,004,006,008} 003={003,002,001,009,004} 001={001,002,004,006,008} 004={004,005,006,009,008,007} 001={001,002,004,006,008} 006={006,001,004,009,005,008} 002={002,003,005,006,008,009

基于Spark ALS构建商品推荐引擎

基于Spark ALS构建商品推荐引擎 一般来讲,推荐引擎试图对用户与某类物品之间的联系建模,其想法是预测人们可能喜好的物品并通过探索物品之间的联系来辅助这个过程,让用户能更快速.更准确的获得所需要的信息,提升用户的体验.参与度以及物品对用户的吸引力. 在开始之前,先了解一下推荐模型的分类: 1.基于内容的过滤:利用物品的内容或是属性信息以及某些相似度定义,求出与该物品类似的物品 2.协同过滤:利用大量已有的用户偏好来估计用户对其未接触过的物品的喜好程度 3.矩阵分解(包括显示矩阵分解.隐式矩阵

计算客 商品推荐走马灯(简单)(求区间所有连续的回文串价值)

796次 55.1% 2000ms 65536K 有一个新的研究显示,人在看见一系列的图片时,如果它们的排列有一定的轴对称性,则会更为觉得赏心悦目.根据这个特性,作为阿里巴巴旗下重要的电子商务交易平台的淘宝,希望了解商品推荐的图片走马灯现在的赏心悦目情况,以便判断是否之后需要做出调整.例如,当价值分别为 1,2,1 的商品图片排列在一起的时候,人们可以看到它的所有非空区间 [1].[2].[1].[1,2].[2,1].[1,2,1] 中有四个是轴对称的,所以这组图片的展示价值是所有轴对称的非空

浅谈商品推荐:如何猜中用户的心思?

去商场前,你告诉自己今天只买T恤,出商场时,你还是拎了大包小包--导购员看你摸了摸连衣裙,让你免费试穿,结果你这一穿就不愿脱下了,而且一件接一件.导购猜测顾客喜欢什么,推荐顾客试穿,满足双方各自的心理诉求来达成交易.电商网站如何猜测用户的心思,推荐商品达成交易呢?我们不可能让人来感知用户的诉求,只能用数据和规则告诉用户,我知道你看上的是这件商品.所有不着调的推荐都是耍流氓,不着调的推荐不如不推荐. 一.推荐算法 推荐算法主要有基于内容的推荐算法.协同过滤算法和基于人口的统计学推荐.先来科普下这几

less和reset.css的引用及首页活动、商品推荐模块的建立及flex布局

?记在前面 人生最大的希望在于:自己值得自己等待 先打开运行项目: 一.less和reset.css的使用 1.less的引用: 安装less和less-loader(之前补充过了)传送地址:https://www.cnblogs.com/crystral/p/9117161.html 2.reset.css的引用 ①去这个网站(https://cssreset.com/)下载一个reset.css文件,然后copy到src目录下: (这个我没有下载下来,点击没反应,所以去老师那里copy了一份

阶段一-02.分类,推荐,搜索,评价,购物车开发-第2章 商品推荐+搜索功能实现-2-1 商品推荐 - 需求分析与sql查询

下面关于新商品一些商家的推荐. 下面这些没一个都是一个分类,滚动条向上滚动,下面的一个个分类数据都展示出来.判断页面的滚动,实现懒加载. 滚动条触底后,会把下一个要展示的商品分类懒加载. 前端的代码 scroll的滚动的监听, index就是我们的vue的对象.在页面的最上方定义的 首先获取当前的分类的list catIndex html内容的渲染.rootCat就是一个json对象. 右侧包含最新的6个商品 后端 多表关联查询,一个是分类表,一个是商品表. 商品表的表结构. cat_id:子分

easymall项目的商品删除,前台商品分页,商品详情,购物车模块

简单的挑选一下昨天所学的重点知识模块,以备后续的复习 一.购物车模块1.1购物车两种实现的区别:!!!!!!!! 用session保存  缺点:浏览器关闭,session失效时保存在session中购物信息将会消失  后续优化,将购买的信息除了保存在session中以外,还要将购物的信息保存在cookie中,这样  就解决了浏览器关闭购买商品信息丢失的问题(但是解决不了跟换电脑信息丢失的问题)  优点:不用操作数据库,可以减少数据库访问压力 数据库中:  缺点:只用登录的用户才能添加购物车   

js实现的购物车选中商品实现计算商品总价格

js实现的购物车选中商品实现计算商品总价格:为了在激烈的互联网竞争中获得一席之地,都努力使自己的网站更为人性化,比如在购物网站一般都有这样的功能,那就是在结算商品的时候,网站可以自动计算要购买商品所需要花费的金钱数量.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http:

电商网站商品模型之商品详情页设计方案

如下设计方案参考淘宝和华为商城 SKU SPU的关系 SPU = Standard Product Unit (标准产品单位)SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产品的特性.例如iphone4就是一个SPU,与套餐.存储容量.颜色无关. SKU=stock keeping unit(库存量单位)SKU即库存进出计量的单位, 可以是以件.盒.托盘等为单位.SKU是物理上不可分割的最小存货单元.在使用时要根据不同业态,不同管理模式来处理.例如32G