Arrays HBase阵列和配置单元
我正在尝试使用Hadoop的ArrayWritable类将数组写入HBase。我正在将列表序列化为ArrayWritable,然后使用WritableUtils.toByteArray获取字节。阅读时,我从ArrayWritable重建列表。已在下面添加此操作的代码。我能够正确地将列表读/写到HBase数据库中 然而,当我们试图在写入的数据之上创建一个外部表时,我们无法看到预期格式的存储数组。字符串列表显示为不带任何分隔符的串联字符串,当然不是数组或字符串 问题:我们需要HBase阵列以可行的格式在Hive中可见,我们可以使用。我们还将导出这些数据以便查询到Redshift,因此需要一些可行的方法。如何修改我的读/写方法,使其既适用于Java应用程序,又适用于Hive/Redshift 用于序列化和反序列化的方法:Arrays HBase阵列和配置单元,arrays,hadoop,hive,Arrays,Hadoop,Hive,我正在尝试使用Hadoop的ArrayWritable类将数组写入HBase。我正在将列表序列化为ArrayWritable,然后使用WritableUtils.toByteArray获取字节。阅读时,我从ArrayWritable重建列表。已在下面添加此操作的代码。我能够正确地将列表读/写到HBase数据库中 然而,当我们试图在写入的数据之上创建一个外部表时,我们无法看到预期格式的存储数组。字符串列表显示为不带任何分隔符的串联字符串,当然不是数组或字符串 问题:我们需要HBase阵列以可行的格
public static ArrayWritable getWritableFromArray(List<String> stringList) {
Writable[] writables = new Writable[stringList.size()];
for (int i = 0; i < writables.length; i++) {
writables[i] = new Text(stringList.get(i));
}
return new ArrayWritable(Text.class, writables);
}
public static List<String> getListFromWritable(ArrayWritable arrayWritable) {
Writable[] writables = arrayWritable.get();
List<String> list = new ArrayList<>(writables.length);
for (Writable writable : writables) {
list.add(((Text) writable).toString());
}
return list;
}
将此数据导出为红移时,城市显示为串联,如下所示:
indoreraipur
chandigarhindore
我怎样才能解决这个问题?试图将列表直接写入HBase是个坏主意吗?我是否应该尝试手动序列化和反序列化它,并将其作为字符串而不是数组类型写入?看看这个。谢谢,但这并不能真正解决我的问题;它主要解释了如何在HBase中存储阵列,这与上面的代码基本相同。
select * from testdata;
OK
23821975838576221 ["\u0000\u0000\u0000\u0001\u0006raipur\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"]
808554262192775221 ["\u0000\u0000\u0000","\u0006indore\u0006raipur\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"]
2361689275801875221 ["\u0000\u0000\u0000","\u0006indore\u0006raipur\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"]
4897772799782875221 ["\u0000\u0000\u0000","\nchandigarh\u0006indore\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"]
indoreraipur
chandigarhindore