因为数据清洗部分需要用到Mapreduce,所以先解决hbase的问题,可以用命令先在hbase存一下简单的数据进行查询,之后只要替换数据就可以实现了原本功能

在看该部分前,确保Hase API看了,懂了一点

题目

  1. 使用HBASE的API实现条件查询功能,具体内容如下:

(1)根据开始时间和结束时间搜索这段时间内的访问记录。输入信息为开始时间和结束时间,用‘|’字符隔开)

(2)根据用户ID搜索该用户的访问记录。输入信息为一个或多个用户ID,用‘|’字符隔开(并)

(3)根据关键字搜索含有该关键字的用户查询词记录。输入信息为一个或多个关键字,用‘|’字符隔开 (交)

(4)根据关键字(如baidu)等搜索相关网站的URL访问记录,输入信息为一个或多个关键字,用‘|’字符隔开(交)

(5)实现以上四个条件任意组合的联合搜索。四个条件之间用’+’字符隔开 (联合搜索要求所有条件同时满足)

分析

仔细分析一下这五个题目很像,就是用到了过滤器的知识,代码很类似。

CompareFilter.CompareOp.
LESS <
LESS_OR_EQUAL <=
EQUAL =
NOT_EQUAL <>
GREATER_OR_EQUAL >=
GREATER >

以(4)为例子

public static void selectURLs(String[] urls) throws IOException {
//过滤连 MUST_PASS_ALL(and) MUST_PASS_ONE(or)
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
//创建单列值过滤器
for(String url:urls){
SingleColumnValueFilter singleColumnValueFilter =
new SingleColumnValueFilter(Bytes.toBytes("hc"),Bytes.toBytes("URL"),
CompareFilter.CompareOp.EQUAL,new SubstringComparator(url));
//添加到过滤器
filterList.addFilter(singleColumnValueFilter);
}
Table table = HbaseUtils.getTable(Constants.TABLENAME);
HbaseUtils.showFilter(table,filterList);
HbaseUtils.close(table);
}

分析一下(5),比较坑的一点就是你可能会想到用split来切割

如果输入条件+1++,最后得到的结果只有1,所以需要循坏字符串来切割

String[] parts={"","","",""};
int cnt = 0;
for(int i=0;i<line.length();i++){
if(line.charAt(i)!='+'){
parts[cnt]+=line.charAt(i);
}else{
cnt++;
}
}

第四部分 数据搜索之使用HBASE的API实现条件查询的更多相关文章

  1. 第六部分 数据搜索之使用HBASE的API实现条件查询

    题目 使用HADOOP的MAPReduce,实现以下功能: (1)基于大数据计算技术的条件查询:使用mapreduce框架,实现类似Hbase六个字段查询的功能 (2)时段流量统计:以hh:mm:ss ...

  2. hbase shell插入根据条件查询数据

    hbase shell插入根据条件查询数据 创建并插入数据: hbase(main):179:0> create 'scores','grade','course' hbase(main):18 ...

  3. 大数据学习系列之三 ----- HBase Java Api 图文详解

    版权声明: 作者:虚无境 博客园出处:http://www.cnblogs.com/xuwujing CSDN出处:http://blog.csdn.net/qazwsxpcm 个人博客出处:http ...

  4. Hbase API 多条件查询

    public static ResultScanner scan(String tableName, String family, List<String> columns, List&l ...

  5. B-树和B+树的应用:数据搜索和数据库索引

    B-树和B+树的应用:数据搜索和数据库索引  B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用. 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每 ...

  6. 大数据【七】HBase部署

    接着前面的Zookeeper部署之后,现在可以学习HBase了. HBase是基于Hadoop的开源分布式数据库,它以Google的BigTable为原型,设计并实现了具有高可靠性.高性能.列存储.可 ...

  7. 大数据时代数据库-云HBase架构&生态&实践

    业务的挑战 存储量量/并发计算增大 现如今大量的中小型公司并没有大规模的数据,如果一家公司的数据量超过100T,且能通过数据产生新的价值,基本可以说是大数据公司了 .起初,一个创业公司的基本思路就是首 ...

  8. jQuery dataTables四种数据来源[转]

    2019独角兽企业重金招聘Python工程师标准>>> 四种数据来源 对于 dataTables 来说,支持四种表格数据来源. 最为基本的就是来源于网页,网页被浏览器解析为 DOM ...

  9. CRL快速开发框架系列教程四(删除数据)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

随机推荐

  1. 从零学脚手架(五)---react、browserslist

    如果此篇对您有所帮助,在此求一个star.项目地址: OrcasTeam/my-cli react react介绍 目前,国内主流的前端应用框架具有两个:vue.js和react.js,关于vue和r ...

  2. Linux 三剑客之 awk 实战详解教程

    我们知道 Linux 三剑客,它们分别是:grep.sed.awk.在前边已经讲过 grep 和 sed,没看过的同学可以直接点击阅读,今天要分享的是更为强大的 awk. sed 可以实现非交互式的字 ...

  3. [set]JZOJ 5821 手机信号

    Description

  4. 对象存储服务-Minio

    Mino 目录 Mino 对象存储服务 Minio 参考 Minio 架构 为什么要用 Minio 存储机制 纠删码 MinIO概念 部署 单机部署: Docker 部署Minio 分布式Minio ...

  5. HTML总结篇

    一.HTML基本结构标签 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  6. Python | random 模块:Python 中如何生成随机数和随机抽样?

    random 是平时开发过程中常用的一个模块,该模块实现了各种分布的伪随机数生成器,以及和随机数相关的各种实用函数.基本函数 random() 在区间 [0.0, 1.0) 内均匀生成随机浮点数,是模 ...

  7. C++并发与多线程学习笔记--future成员函数、shared_future、atomic

    std::future的其他成员函数 std::shared_future 原子操作.概念.基本用法 多线程主要是为了执行某个函数,本文的函数的例子,采用如下写法 int mythread() { c ...

  8. 滴水逆向初级-C语言(二)

    2.1.C语言的汇编表示 c语言代码 int plus(int x,int y) { return 0; } void main() { __asm { mov eax,eax } //调用函数 pl ...

  9. kestrel Server的源码分析

    今天这一篇博客讲的是.net core 自带的kestrel server,当你开发微服务k8s部署在linux环境下,一般默认开启这个高性能服务,如果大家之前看过我的owin katana的博客,会 ...

  10. Spring Cloud Gateway 扩展支持动态限流

    之前分享过 一篇 <Spring Cloud Gateway 原生的接口限流该怎么玩>, 核心是依赖Spring Cloud Gateway 默认提供的限流过滤器来实现 原生Request ...