HIVE迁移的点点滴滴(一)

今天处理了一点点推荐系统的迁移。
现在用的推荐系统是在数据仓库里离线计算,生成计算结果推送给网站的。之前用的是基于商品的协同过滤算法,全sql实现,算法本身不是很复杂,但当时为了简单起见,用了游标处理了下。HIVE很不幸地不支持游标,如果要迁过去,要么自己写java程序,要么改写成不用游标的sql实现。显然后一种靠谱点

原来核心算法实现语句

select
        m_goods.goods_id  goods_id,
        goods_id          prs_goods_id,
        count(t.user_id)  buy_num,
        t.site_id
        from prs_user_pb t
       where t.user_id in
        (select distinct user_id from prs_user_pb  where goods_id=m_goods.goods_id)
        and goods_id<>m_goods.goods_id
        group by t.goods_id,m_goods.goods_id,t.site_id
        order by buy_num desc


m_goods是游标列,每次从游标那取一条数据处理。 prs_user_pb  是先期处理的一张表,为用户和所购买商品的主表

修改后的代码如下

select
        t2.goods_id        goods_id,
        t1.goods_id        prs_goods_id,
        count(distinct t1.user_id)  buy_num,
        t1.site_id
        from prs_user_pb t1,(select goods_id,user_id from prs_user_pb) t2
       where  t1.user_id=t2.user_id and t1.goods_id<>t2.goods_id
        group by t1.goods_id,t2.goods_id,t1.site_id
        order by buy_num desc


游标性能不咋地,改了之后快了很多。最重要的是可以迁到HIVE里去了,起码饭碗保住了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值