【发布时间】:2021-01-06 13:40:43
【问题描述】:
这是背景。我有一个操作可能会从 hbase 扫描很多行。因为行数可能很大,所以我想返回一个 Stream of rows。问题是:如何关闭 ResultScanner?
这样的方法
public <T> Stream<T> getResultStream(String tableName,Scan scan, RowMapper<T> mapper){
scan.setCaching(5000);//set number of rows to fetch for each rpc
Table table=this.getConnection().getTable(tableName);
ResultScanner scanner = table.getScanner(scan);
return StreamSupport.stream(scanner.spliterator(),false).map(mapper::mapRow);
// scanner.close(); where to close it ?
}
显然我无法在此方法中关闭 ResultScanner。有什么优雅的方法吗?
【问题讨论】: