向 Hbase 添加多个值 table
Add multiple values to Hbase table
我正在使用 Mapreduce 将数据插入我的 Hbase table。因为我不能插入图片所以我只描述我的 Hbase table 如下:
{
"rowkey1": {
File: {
source: "path to file"
}
Features: {
feature1: "value 1"
feature1: "value 2"
}
}
......
}
在 map 函数中,我将获取所有值:"path to file"、"value 1"、"value 2" 以插入到 "rowkey1"。
但这里的问题是我们只能同时为 1 个家庭为 1 个限定符设置 1 个值。
public void map(Text key, BytesWritable bytes, Context context)throws IOException {
Put put = new Put(key.getBytes());
put.add(family, qualifier, bytes.getBytes());
try {
context.write(new ImmutableBytesWritable(key.getBytes()), put);
} catch (InterruptedException e) {
e.printStackTrace();
}
所以我的问题是有什么方法可以同时将这些值插入到 Hbase table。
谢谢
你不能做类似下面的事情吗?
map(..) {
...
for(value: valueList) {
put = new Put(...)
put.add...
context.write(new ImmutableBytesWritable(key.getBytes()), put);
}
}
您可以在单次 map
迭代中多次执行 context.write()
。
虽然如果每 map
的迭代次数很大,可能效率不高。 (在这种情况下考虑不同的设计或方法)
如果我对你的问题的理解不正确,请随时纠正我。
我正在使用 Mapreduce 将数据插入我的 Hbase table。因为我不能插入图片所以我只描述我的 Hbase table 如下:
{
"rowkey1": {
File: {
source: "path to file"
}
Features: {
feature1: "value 1"
feature1: "value 2"
}
}
......
}
在 map 函数中,我将获取所有值:"path to file"、"value 1"、"value 2" 以插入到 "rowkey1"。
但这里的问题是我们只能同时为 1 个家庭为 1 个限定符设置 1 个值。
public void map(Text key, BytesWritable bytes, Context context)throws IOException {
Put put = new Put(key.getBytes());
put.add(family, qualifier, bytes.getBytes());
try {
context.write(new ImmutableBytesWritable(key.getBytes()), put);
} catch (InterruptedException e) {
e.printStackTrace();
}
所以我的问题是有什么方法可以同时将这些值插入到 Hbase table。
谢谢
你不能做类似下面的事情吗?
map(..) {
...
for(value: valueList) {
put = new Put(...)
put.add...
context.write(new ImmutableBytesWritable(key.getBytes()), put);
}
}
您可以在单次 map
迭代中多次执行 context.write()
。
虽然如果每 map
的迭代次数很大,可能效率不高。 (在这种情况下考虑不同的设计或方法)
如果我对你的问题的理解不正确,请随时纠正我。