FirstKeyOnlyFilter :api中解释如下:
A filter that will only return the first KV from each row.
This filter can be used to more efficiently perform row count operations.
说的明明白白,只会取得每条数据的第一个kv,可以用于count,计算总数,速度很快
代码如下:
希望批评指正
public int getCount() {
long bef = System.currentTimeMillis();
int i = 0; HTable tableKeyword = new HTable(conf,"tableName"); tableKeyword.setScannerCaching(500);
ResultScanner rs = null;
try {
Scan s = new Scan();
s.setCaching(500);
s.setCacheBlocks(false);
s.setFilter(new FirstKeyOnlyFilter());
rs = tableKeyword.getScanner(s);
} catch (IOException e) {
log.warn(e);
e.printStackTrace();
}
for (org.apache.hadoop.hbase.client.Result r : rs) {
i++ ;
}
long now = System.currentTimeMillis();
log.warn("keyword表中数据总数 :" + i + ", 所用时间 : " + (now - bef)/1000.0);
rs.close();
return i;
}
最好设置tableKeyword.setScannerCaching(500);
s.setCaching(500);
s.setCacheBlocks(false);这三个参数,否则速度会降下来很多
总的来说,可以节省很多时间