使用java检索hbase中的任何三个随机限定符

Posted

技术标签:

【中文标题】使用java检索hbase中的任何三个随机限定符【英文标题】:Retrieve any three random qualifier in hbase using java 【发布时间】:2014-05-13 09:44:44 【问题描述】:

我的 hbase 表如下所示:

hbase(main):040:0> scan 'TEST' 
ROW               COLUMN+CELL                                                                                                
4                 column=data:108, timestamp=1399972960190, value=-240.0                                                     
4                 column=data:112, timestamp=1399972960138, value=-160.0                                                     
4                 column=data:12, timestamp=1399972922979, value=2                                                           
4                 column=data:120, timestamp=1399972960124, value=-152.0                                                     
4                 column=data:144, timestamp=1399972960171, value=-240.0                                                     
4                 column=data:148, timestamp=1399972960152, value=-240.0                                                     
4                 column=data:16, timestamp=1399972909606, value=9                                                           
4                 column=data:8, timestamp=1399972917978, value=6                 

其中所有 4 都是行 id,而 108,112,12... 是限定符。我想从这个表 TEST 中随机获取三个限定符。

我可以获取所有限定符,但不能获取随机的三个限定符。 java中是否有任何shell命令或API可以实现这一点?

【问题讨论】:

如果我只能获得前三个预选赛,没关系。有知道的请回答一下? 【参考方案1】:

如果只是获取前三行,请使用 scan shell 命令并将 LIMIT 设置为 3

hbase(main):001:0> scan 'demo', LIMIT => 3

如果您希望使用 Java API 执行此操作,请在 ResultScanner 上设置一个循环,该循环在第三次迭代后中断。简单易行。

public static void main(String[] args) throws IOException 

        Configuration conf = HBaseConfiguration.create();
        HTable table = new HTable(conf, "demo");
        Scan s = new Scan();
        ResultScanner rs = table.getScanner(s);
        int check = 0;
        for(Result r : rs)
            if(++check > 3)
                break;              
            for (KeyValue kv : r.raw())                    
                System.out.println("Qualifier : " + Bytes.toString(kv.getQualifier()));
                                       
        
        rs.close();
        table.close();
    

如果您希望获得 3 个随机行,请在上述方法中使用 RandomRowFilter

HTH

【讨论】:

知道这个的请回复***.com/questions/23647908/…

以上是关于使用java检索hbase中的任何三个随机限定符的主要内容,如果未能解决你的问题,请参考以下文章

通过 hbase shell 命令显示列族和列限定符

hbase 随机写入的工作原理

hbase的一些要点

HBase 过滤器匹配包含字符串的每一行

HBase:使用限定符和值的过滤器扫描时如何获得完整的行?

java 16 -14 建立产生不重复的限定个数的随机数集合