我正试图从Accumulo Value (key,Value)写入和读取Uid。使用protobuf列表。具体地说:org.apache.accumulo.examples.wikisearch.protobuf.Uid;进口org.apache.accumulo.examples.wikisearch.protobuf.Uid.List.Builder
我使用以下代码编写Uid。列表,我声明UidListCount为列表中uid的# Cseq:
Builder uidBuilder = Uid.List.newBuilder();
uidBuilder.setIGNORE(false);
for String entry : seq){
uidBuilder.addUID(entry);
}
Uid.List uidList = uidBuilder.build();
Value newAccumuloValue = new Value(uidList.toByteArray());
这似乎可以正常工作。
When I Try to read the Uid。从accumulo value中列出一个列表,其中value是一个protobuf Uid。列表,这是一个禁忌:
byte[] byteVal = value.getBytes; //retrieving Accumulo Value containing Uid.List
Uid.List uids= Uid.List.parseFrom(byteVal);
while (counter <= counter){
String uidStr = uids.getUID(counter).toString();
system.out.println(uidStr);
}
我一直得到"tag errors"
我很想知道如何读出输入的内容。
谢谢!
我建议将第二段代码改为:
byte[] byteVal = value.getBytes;
Uid.List uids= Uid.List.parseFrom(byteVal);
int count = uids.getUIDCount();
for (int i = 0; i< count; i++){
String uidStr = uids.getUID(i).toString();
system.out.println(uidStr);
}
只要在protobuf构建列表之前正确清理列表中的uid,此代码就可以工作。如果数据中有被protobuf用作列表格式一部分的字符(例如unicode null),那么在解析数据返回时,它将中断,因为数据字符将被识别为不能正确匹配数据模式的格式字符。我将首先查看您的数据,并确保它符合您试图实现的数据质量和清洁度标准。