我正在开发Hadoop在Cassandra上运行。它运行得很好,但我现在遇到了一个我无法找到解决方案的问题。
我的一个列包含一个集合,定义类似于:
create table productUsage(
....
products map,
productcategories map
)...
等
在我的map / reduce map函数中,我需要读取这些列中的值,但是不能弄清楚如何将列数据(这是一个字节缓冲区)转换为可用的HashMap变量 - ByteBufferUtil函数似乎没有帮助。
我现有的map / reduce地图代码提取列值如下所示......
string productid;
HashMap products;
for (Entry column : columns.entrySet()){
if ("productid".equalsIgnoreCase(column.getKey())){
productid = ByteBufferUtil.string(column.getValue());
}
if ("products".equalsIgnoreCase(column.getKey())){
products = ???? //ByteBufferUtil.string(column.getValue());
}
if ("productid".equalsIgnoreCase(column.getKey())){
productid = ByteBufferUtil.string(column.getValue());
}
if ("products".equalsIgnoreCase(column.getKey())){
products = ???? //ByteBufferUtil.string(column.getValue());
}
有没有人有任何想法,或者有人能指出我正确的方向吗?
由于 格里
答案 0 :(得分:2)
我会把它留作答案。
使用MapType.getInstance(K-type,V-Type).compose(column.getValues())
其中K-Type
和V-Type
是键和值类的实例(例如Int32Type.instance
,UTF8Type.instance
等)