*/
String projection2 = new String("m1#{b}, m2#{x|z}");
BasicTable.Reader reader = new BasicTable.Reader(path, conf);
reader.setProjection(projection2);
List<RangeSplit> splits = reader.rangeSplit(1);
TableScanner scanner = reader.getScanner(splits.get(0), true);
BytesWritable key = new BytesWritable();
Tuple RowValue = TypesUtils.createTuple(scanner.getSchema());
scanner.getKey(key);
Assert.assertEquals(key, new BytesWritable("k11".getBytes()));
scanner.getValue(RowValue);
System.out.println("map of map: " + RowValue.toString());
// map of map: ([b#B],[z#,x#{m311=311, m321=321, m331=331}])
Assert.assertEquals("B", ((Map) RowValue.get(0)).get("b"));
Assert.assertEquals(321, ((Map) ((Map) RowValue.get(1)).get("x"))
.get("m321"));
Assert.assertEquals(311, ((Map) ((Map) RowValue.get(1)).get("x"))
.get("m311"));
Assert.assertEquals(331, ((Map) ((Map) RowValue.get(1)).get("x"))
.get("m331"));
Assert.assertEquals(null, ((Map) ((Map) RowValue.get(1)).get("x"))
.get("m341"));
Assert.assertEquals(null, ((Map) ((Map) RowValue.get(1)).get("z")));
Assert.assertEquals(null, ((Map) ((Map) RowValue.get(0)).get("a")));
Assert.assertEquals(null, ((Map) ((Map) RowValue.get(0)).get("c")));
System.out.println("rowValue.get)1): " + RowValue.get(1).toString());
// rowValue.get)1): {z=null, x={m311=311, m321=321, m331=331}}
scanner.advance();
scanner.getKey(key);
Assert.assertEquals(key, new BytesWritable("k12".getBytes()));
scanner.getValue(RowValue);
Assert.assertEquals(null, ((Map) RowValue.get(0)).get("b"));
Assert.assertEquals(null, ((Map) ((Map) RowValue.get(1)).get("x")));
Assert.assertEquals(323, ((Map) ((Map) RowValue.get(1)).get("z"))
.get("m323"));
Assert.assertEquals(322, ((Map) ((Map) RowValue.get(1)).get("z"))