HBase에 값으로 저장하는 복잡한 Avro 레코드 (중첩 레코드, 유니온 타입)가 있습니다. 같은 rowkey을 가진 레코드가 이미 존재하는지 그때 HBase를을 확인Java의 HBase에서 Avro 레코드 읽기
Schema schema = new Schema.Parser().parse(schema_file);
DatumReader<GenericRecord> datumReader = new SpecificDatumReader<GenericRecord>(schema);
DataFileReader<GenericRecord> dataFileReader = new DataFileReader<GenericRecord>(avro_file, datumReader);
GenericRecord record = null;
record = dataFileReader.next(record);
: 저는 현재 파일의 작가 스키마와 일치하는 스키마 및 HBase와에있는 레코드를 사용하여 아 브로 데이터 파일에 읽습니다. 이 경우
if (val == null) {
System.out.println("pk: "+pk+" does not exist");
Put put = new Put(Bytes.toBytes(pk));
put.add(Bytes.toBytes("c"), Bytes.toBytes("c"), Bytes.toBytes(record.toString()));
try {
table.put(put);
} catch (Exception e) {
System.err.println("Can't put to table: " + e);
}
}
else {
System.out.println("pk: "+pk+" does exist");
//help me!
}
: 더 레코드가 같은 rowkey과 HBase를 거기에 없다면
이Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, "table");
String pk = new String(record.get("x").toString()+record.get("y").toString());
Get get = new Get(Bytes.toBytes(pk));
Result result = table.get(get);
byte[] val = result.getValue(Bytes.toBytes("c"),Bytes.toBytes("c"));
, 나는에 기록을 넣어 내 GET에 의해 반환 된 발은 브로 레코드의 바이트 배열 표현입니다 동일한 rowkey를 가진 HBase의 레코드, HBase 결과의 바이트 배열을 Avro 스키마로 다시 변환 한 다음 두 필드를 비교하여 어떤 레코드가 '더 나은'것인지 확인합니다. HBase에 '더 나은'레코드를 넣고 싶습니다.하지만 막혔습니다. HBase의 바이트 배열을 GenericRecord로 변환하여 파일 레코드와 HBase 사이의 필드를 비교할 수 있습니까?