我正在将我的google数据流java 1.9迁移到beam 2.0,我正在尝试使用BigtableIO.Write
....
.apply("", BigtableIO.write()
.withBigtableOptions(bigtableOptions)
.withTableId("twoSecondVitals"));
在BigtableIO之前的ParDo中,我正努力尝试制作Iterable。
try{
Mutation mutation = Mutation.parseFrom(new ObjectMapper().writeValueAsBytes(v));
Mutation mu[] = {mutation};
Iterable<Mutation> imu = Arrays.asList(mu);
log.severe("imu");
c.output(KV.of(ByteString.copyFromUtf8(rowKey+"_"+v.getEpoch()), imu));
}catch (Exception e){
log.severe(rowKey+"_"+v.getEpoch()+" error:"+e.getMessage());
}
上面的代码抛出以下异常 InvalidProtocolBufferException:协议消息end-group标记与期望标记
不匹配v是一个对象列表(Vitals.class)。 hbase api使用Put方法创建变异。如何创建一个可与BigtableIO接收器一起使用的BigTable变异?
答案 0 :(得分:4)
通过查看sdk的测试,我能够找到答案。
Iterable<Mutation> mutations =
ImmutableList.of(Mutation.newBuilder()
.setSetCell(
Mutation.SetCell.newBuilder()
.setValue(ByteString.copyFrom(new ObjectMapper().writeValueAsBytes(v)))
.setFamilyName("vitals")
).build());