如何使用WholeRowIterator作为另一个迭代器的源?

时间:2015-01-20 18:55:24

标签: accumulo

我在使用WholeRowIterator过滤行后尝试过滤掉列。这是为了删除有助于确定要保留哪一行的列,但在扫描返回的数据中没有用。

WholeRowIterator似乎不能作为另一个迭代器(如RegExFilter)的源代码。我知道键/值是由WholeRowIterator编码的。

是否有任何可能的解决方案让这个迭代器堆栈起作用?

感谢。

1 个答案:

答案 0 :(得分:1)

通常,WholeRowIterator是“堆栈”中的最后一个迭代器,因为它涉及将行(许多键值)序列化为单个键值。你可能不想多做一次。但是,我们假设你想这样做:

您可能希望编写一个Iterator,使用WholeRowIterator方法将每个Key-Value反序列化为SortedMap,修改SortedMap,将其重新序列化为单个Key-Value,然后返回它。需要为此迭代器分配高于给予WholeRowIterator的优先级的优先级。

或者,您可以扩展WholeRowIterator并覆盖encodeRow(List<Key>,List<Value>)方法,以便不首先序列化不需要的列。这将节省第一种方法的额外序列化和反序列化。