2015-01-20 24 views
0

我想在使用WholeRowIterator過濾行之後過濾掉列。這是爲了刪除在確定要保留哪一行時非常有用的列,但在掃描返回的數據中無用。如何使用WholeRowIterator作爲另一個迭代器的源?

WholeRowIterator似乎不像另一個迭代器(如RegExFilter)的源代碼那麼好玩。我知道keys/values是由WholeRowIterator編碼的。

是否有任何可能的解決方案來使此迭代器堆棧工作?

謝謝。

回答

1

通常,WholeRowIterator是「堆棧」中的最後一個迭代器,因爲它涉及將行(多個鍵值)序列化爲單個鍵值。你可能不想多做一次。但是,讓我們假設你想這樣做:

你會想編寫一個Iterator,它使用WholeRowIterator方法將每個Key-Value反序列化成一個SortedMap,修改SortedMap,將其重新串行化爲一個Key-Value,然後返回它。這個迭代器需要被分配一個高於給予WholeRowIterator優先級的優先級。

或者,您可以擴展WholeRowIterator並覆蓋encodeRow(List<Key>,List<Value>)方法,以便首先不序列化不需要的列。這將節省第一種方法的額外序列化和反序列化。

+0

謝謝你的回覆。我發現了另一個潛在的解決方案,那就是將代碼轉換爲使用RowFilter。這似乎可以用作任何後續迭代器的源代碼。 – 2015-01-20 22:14:04

相關問題