一、hbase批量put操作报java.lang.IllegalArgumentException: No columns to insert
代码片段
List<Put> putList = new ArrayList<Put>();
Table globaltable = HBaseUtil.getTable(newconn, "global_test");
for (Result r : scanner) {
RowRecord record = RowRecordUtil.getRowRecord(r);
if (record == null) {
System.out.println("OVER MAX VALUE");
continue;
}
if (record.getClick_count() != 0) {
put.addColumn(Bytes.toBytes(HbaseConstant.TABLE_FAMILY_NAME_INFO),
Bytes.toBytes(HbaseConstant.EMAIL_COL_NAME_CLICK_COUNT),
Bytes.toBytes(String.valueOf(record.getClick_count())));
}
putList.add(put);
if (count != 0 && count % 1000 == 0) {
globaltable.put(putList);
putList.clear();
}
}
通过调试打印put.toString()方法调试发先putList对像中存在{"totalColumns":0,"families":{},"row":"#bda3e8a7b31e2f227"}数据,这种数据"families":{}为空导致异常。正确数据格式应该为{"totalColumns":1,"families":{"info":[{"timestamp":9223372036854775807,"tag":[],"qualifier":"invalid_count","vlen":1}]},"row":"#7c916052085fcd764"}
造成"families":{}为空由于代码逻辑导致如图,record.getClick_count==0的时候导致列为空