【发布时间】:2016-12-23 06:27:20
【问题描述】:
我编写了一个 mapreduce 程序,我需要从特定列族的 HBase 表中读取数据。
例如,HBase 表中的数据如下所示:
Row Column+Cell
1 column=Name:FName, timestamp=...,value=ABC
1 column=Name:LName, timestamp=...,value=XYZ
现在我需要将 FName 和 LName 作为 FullName 附加到同一列族下的另一列中。在 map 中,我正在提取数据并将其附加并发送到 reducer。
在 Reducer 中,我只是获取键、值对并尝试将 FullName 添加到表中。
我的 reducer 实现如下所示:
public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
Put put = new Put(Bytes.toBytes(key.toString()));
put.add(Bytes.toBytes("Name"), Bytes.toBytes("FullName"), Bytes.toBytes(values.toString()));
context.write(null, put);
}
当我检查 hbase 表中的 Fullname 时,值不是“ABCXYZ”而是我得到的值是 org.apache.hadoop.mapreduce.task.ReduceContextImpl$ValueIterable。
请告诉我如何解决此问题。
【问题讨论】: