美文网首页
尚硅谷大数据技术之HBase

尚硅谷大数据技术之HBase

作者: 尚硅谷教育 | 来源:发表于2018-12-13 17:10 被阅读71次

    8.2.8 移除(取关)用户
    a、在微博用户关系表中,对当前主动操作的用户移除取关的好友(attends)
    b、在微博用户关系表中,对被取关的用户移除粉丝
    c、微博收件箱中删除取关的用户发布的微博
    代码:public void removeAttends(String uid, String... attends)
    /**

    • 取消关注(remove)

    • a、在微博用户关系表中,对当前主动操作的用户删除对应取关的好友

    • b、在微博用户关系表中,对被取消关注的人删除粉丝(当前操作人)

    • c、从收件箱中,删除取关的人的微博的rowkey
      */
      public void removeAttends(String uid, String... attends){
      //过滤数据
      if(uid == null || uid.length() <= 0 || attends == null || attends.length <= 0) return;
      HConnection connection = null;

      try {
      connection = HConnectionManager.createConnection(conf);
      //a、在微博用户关系表中,删除已关注的好友
      HTableInterface relationsTBL = connection.getTable(TableName.valueOf(TABLE_RELATIONS));

       //待删除的用户关系表中的所有数据
       List<Delete> deletes = new ArrayList<Delete>();
       //当前取关操作者的uid对应的Delete对象
       Delete attendDelete = new Delete(Bytes.toBytes(uid));
       //遍历取关,同时每次取关都要将被取关的人的粉丝-1
       for(String attend : attends){
           attendDelete.deleteColumn(Bytes.toBytes("attends"), Bytes.toBytes(attend));
           //b
           Delete fansDelete = new Delete(Bytes.toBytes(attend));
           fansDelete.deleteColumn(Bytes.toBytes("fans"), Bytes.toBytes(uid));
           deletes.add(fansDelete);
       }
       
       deletes.add(attendDelete);
       relationsTBL.delete(deletes);
       
       //c、删除取关的人的微博rowkey 从 收件箱表中
       HTableInterface recTBL = connection.getTable(TableName.valueOf(TABLE_RECEIVE_CONTENT_EMAIL));
       
       Delete recDelete = new Delete(Bytes.toBytes(uid));
       for(String attend : attends){
           recDelete.deleteColumn(Bytes.toBytes("info"), Bytes.toBytes(attend));
       }
       recTBL.delete(recDelete);
      

      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      8.2.9 获取关注的人的微博内容
      a、从微博收件箱中获取所关注的用户的微博RowKey
      b、根据获取的RowKey,得到微博内容
      代码实现:public List<Message> getAttendsContent(String uid)
      /**

    • 获取微博实际内容

    • a、从微博收件箱中获取所有关注的人的发布的微博的rowkey

    • b、根据得到的rowkey去微博内容表中得到数据

    • c、将得到的数据封装到Message对象中
      */
      public List<Message> getAttendsContent(String uid){
      HConnection connection = null;
      try {
      connection = HConnectionManager.createConnection(conf);
      HTableInterface recTBL = connection.getTable(TableName.valueOf(TABLE_RECEIVE_CONTENT_EMAIL));
      //a、从收件箱中取得微博rowKey
      Get get = new Get(Bytes.toBytes(uid));
      //设置最大版本号
      get.setMaxVersions(5);
      List<byte[]> rowkeys = new ArrayList<byte[]>();
      Result result = recTBL.get(get);
      for(Cell cell : result.rawCells()){
      rowkeys.add(CellUtil.cloneValue(cell));
      }
      //b、根据取出的所有rowkey去微博内容表中检索数据
      HTableInterface contentTBL = connection.getTable(TableName.valueOf(TABLE_CONTENT));
      List<Get> gets = new ArrayList<Get>();
      //根据rowkey取出对应微博的具体内容
      for(byte[] rk : rowkeys){
      Get g = new Get(rk);
      gets.add(g);
      }
      //得到所有的微博内容的result对象
      Result[] results = contentTBL.get(gets);

       List<Message> messages = new ArrayList<Message>();
       for(Result res : results){
           for(Cell cell : res.rawCells()){
               Message message = new Message();
               
               String rowKey = Bytes.toString(CellUtil.cloneRow(cell));
               String userid = rowKey.substring(0, rowKey.indexOf("_"));
               String timestamp = rowKey.substring(rowKey.indexOf("_") + 1);
               String content = Bytes.toString(CellUtil.cloneValue(cell));
               
               message.setContent(content);
               message.setTimestamp(timestamp);
               message.setUid(userid);
               
               messages.add(message);
           }
       }
       return messages;
      

      } catch (IOException e) {
      e.printStackTrace();
      }finally{
      try {
      connection.close();
      } catch (IOException e) {
      e.printStackTrace();
      }
      }
      return null;
      }

    本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。

    相关文章

      网友评论

          本文标题:尚硅谷大数据技术之HBase

          本文链接:https://www.haomeiwen.com/subject/cmubhqtx.html