gpt4 book ai didi

java - 使用 RowFilter 按键查询 HBase 表不起作用

转载 作者:行者123 更新时间:2023-11-29 05:58:49 27 4
gpt4 key购买 nike

我有一个 HBase 表(来自 java),我想通过键列表查询该表。我做了以下,但它不工作。

mFilterFeatureIt = mFeatureSet.iterator();
FilterList filterList=new FilterList(FilterList.Operator.MUST_PASS_ONE);

while (mFilterFeatureIt.hasNext()) {
long myfeatureId = mFilterFeatureIt.next();
System.out.println("FeatureId:"+myfeatureId+" , ");
RowFilter filter = new RowFilter(CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes(myfeatureId)) );
filterList.addFilter(filter);
}

outputMap = HbaseUtils.getHbaseData("mytable", filterList);
System.out.println("Size of outputMap map:"+ outputMap.szie());

public static Map<String, Map<String, String>> getHbaseData(String table, FilterList filter) {

Map<String, Map<String, String>> data = new HashMap<String, Map<String, String>>();
HTable htable = null;
try {
htable = new HTable(HTableConfiguration.getHTableConfiguration(),table);
Scan scan = new Scan();
scan.setFilter(filter);

ResultScanner resultScanner = htable.getScanner(scan);
Iterator<Result> results = resultScanner.iterator();

while (results.hasNext()) {

Result result = results.next();
String rowId = Bytes.toString(result.getRow());
List<KeyValue> columns = result.list();
if (null != columns) {

HashMap<String, String> colData = new HashMap<String, String>();
for (KeyValue column : columns) {
colData.put(Bytes.toString(column.getFamily()) + ":"+ Bytes.toString(column.getQualifier()),Bytes.toString(column.getValue()));
}
data.put(rowId, colData);
}

}

} catch (IOException e) {
e.printStackTrace();
} finally {
if (htable != null)
try {
htable.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return data;
}

FeatureId:80515900 ,FeatureId:80515901 ,FeatureId:80515902 ,

outputMap map 大小:0

我看到功能 ID 的值是我想要的,但即使键存在于 hbase 表中,我也总是得到以上输出。谁能告诉我我做错了什么?

编辑:我在上面发布了我的 hbase util 方法的代码,这样你就可以指出那里的任何错误。

我正在尝试执行 SQL 等效操作 select * FROM mytable where featureId in (80515900, 80515901, 80515902) 我在 HBase 中实现相同目的的想法是创建一个具有一个过滤器的过滤器列表对于每个 featureId。对吗?

这是我表格的内容

scan 'mytable', {COLUMNS => ['sample:tag_count'] }

80515900 column=sample:tag_count, timestamp=1339304052748, value=4
80515901 column=sample:tag_count, timestamp=1339304052748, value=0
80515902 column=sample:tag_count, timestamp=1339304052748, value=3
80515903 column=sample:tag_count, timestamp=1339304052748, value=1
80515904 column=sample:tag_count, timestamp=1339304052748, value=2

最佳答案

它没有返回任何数据,就像将数据插入到 hbase 中一样,
键的数据类型是“字符串”(来自您的扫描结果)&在获取时,传入 RowFilter 的值具有“长”数据类型。使用此过滤器:

RowFilter filter = new RowFilter(CompareOp.EQUAL,new    
BinaryComparator(Bytes.toBytes(myfeatureId.toString())) );

关于java - 使用 RowFilter 按键查询 HBase 表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10971955/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com