HBase(11) -- 原生HBase查询数据java代码

1. 项目构建及初始化

创建项目名为momo_msg_data的项目(具体创建略)
在这里插入图片描述

1.1 导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
这里提供一个基于用户的协同过滤推荐算法的Java代码示例: ```java public class UserCF { // 用户-物品评分矩阵 private Map<Integer, Map<Integer, Double>> userItemScoreMap; // 用户之间的相似度矩阵 private Map<Integer, Map<Integer, Double>> userSimMap; public UserCF(Map<Integer, Map<Integer, Double>> userItemScoreMap) { this.userItemScoreMap = userItemScoreMap; this.userSimMap = new HashMap<>(); } /** * 计算用户之间的相似度 */ private void calcUserSim() { for (Integer user1 : userItemScoreMap.keySet()) { for (Integer user2 : userItemScoreMap.keySet()) { if (user1.equals(user2)) { continue; } double sim = getUserSim(user1, user2); if (sim > 0) { Map<Integer, Double> userSimMap1 = userSimMap.getOrDefault(user1, new HashMap<>()); userSimMap1.put(user2, sim); userSimMap.put(user1, userSimMap1); } } } } /** * 计算用户之间的相似度 */ private double getUserSim(int user1, int user2) { Map<Integer, Double> user1ItemScoreMap = userItemScoreMap.get(user1); Map<Integer, Double> user2ItemScoreMap = userItemScoreMap.get(user2); double dotProduct = 0; // 用户1和用户2共同评分的物品的评分乘积之和 double norm1 = 0; // 用户1的评分向量的模 double norm2 = 0; // 用户2的评分向量的模 for (Integer item : user1ItemScoreMap.keySet()) { if (user2ItemScoreMap.containsKey(item)) { dotProduct += user1ItemScoreMap.get(item) * user2ItemScoreMap.get(item); } norm1 += user1ItemScoreMap.get(item) * user1ItemScoreMap.get(item); } for (Integer item : user2ItemScoreMap.keySet()) { norm2 += user2ItemScoreMap.get(item) * user2ItemScoreMap.get(item); } double denominator = Math.sqrt(norm1) * Math.sqrt(norm2); if (denominator == 0) { return 0; } return dotProduct / denominator; } /** * 推荐TopN个物品给指定用户 * * @param userId 指定用户 * @param topN 推荐的物品数 * @return 推荐的物品列表 */ public List<Integer> recommend(int userId, int topN) { calcUserSim(); Map<Integer, Double> itemScoreMap = new HashMap<>(); // 物品评分累加器 Map<Integer, Double> userSimMap1 = userSimMap.get(userId); for (Integer user : userSimMap1.keySet()) { double sim = userSimMap1.get(user); Map<Integer, Double> userItemScoreMap1 = userItemScoreMap.get(user); for (Integer item : userItemScoreMap1.keySet()) { if (!userItemScoreMap.get(userId).containsKey(item)) { double itemScore = userItemScoreMap1.get(item); itemScoreMap.put(item, itemScoreMap.getOrDefault(item, 0.0) + sim * itemScore); } } } List<Integer> itemList = new ArrayList<>(itemScoreMap.keySet()); Collections.sort(itemList, (a, b) -> Double.compare(itemScoreMap.get(b), itemScoreMap.get(a))); return itemList.subList(0, Math.min(topN, itemList.size())); } } ``` 使用示例: ```java Map<Integer, Map<Integer, Double>> userItemScoreMap = new HashMap<>(); userItemScoreMap.put(1, Map.of(1, 5.0, 2, 3.0, 3, 4.0)); userItemScoreMap.put(2, Map.of(1, 4.0, 2, 4.0, 3, 3.0, 4, 5.0)); userItemScoreMap.put(3, Map.of(1, 4.0, 3, 5.0, 4, 3.0)); userItemScoreMap.put(4, Map.of(2, 5.0, 3, 2.0, 4, 4.0)); UserCF userCF = new UserCF(userItemScoreMap); List<Integer> itemList = userCF.recommend(1, 2); System.out.println(itemList); // [4, 1] ``` 以上代码实现了基于用户的协同过滤推荐算法,通过用户之间的相似度来推荐物品。具体来说,先构建用户-物品评分矩阵,然后计算用户之间的相似度,最后根据指定用户的相似用户和相似度,以及相似用户对其他物品的评分,计算指定用户对其他物品的评分,并推荐TopN个物品。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

erainm

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

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

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

打赏作者

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

抵扣说明:

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

余额充值