如何重写accumulo中sortedkeyvalueiterator接口的函数?

6bc51xsx  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(333)

我试图创建一个自定义迭代器,但是由于没有可用的教程,我查看了AccumuloGithub页面上提供的代码。
在那里,我发现所有类都实现了sortedkeyvalueiterator并重写了它的函数。
这些函数的作用是什么?在创建实现sortedkeyvalueiterator的新类时,重写这些函数的方法应该是什么。
这是我试图理解的rowfilter类的示例代码。

public void init(SortedKeyValueIterator<Key,Value> source, Map<String,String> options, IteratorEnvironment env) throws IOException {
super.init(source, options, env);
this.decisionIterator = new RowIterator(source.deepCopy(env));
}

 public SortedKeyValueIterator<Key,Value> deepCopy(IteratorEnvironment env) {
 RowFilter newInstance;
 try {
       newInstance = getClass().newInstance();
     } catch (Exception e) 
      {
         throw new RuntimeException(e);
      }
  newInstance.setSource(getSource().deepCopy(env));
  newInstance.decisionIterator = new RowIterator(getSource().deepCopy(env));
  return newInstance;
   }

我想知道,如果我想让另一个类实现sortedkeyvalueiterator,这段代码做什么,以及应该如何重写这些函数。

insrf1ej

insrf1ej1#

首先看一下sortedkeyvalueiterator上的javadoc--http://accumulo.apache.org/1.6/apidocs/. 对于每种方法应该做的事情来说,这是一个很好的起点。
在编写迭代器时,一个很好的类比是将acumulo表(迭代器正在对其进行操作)看作一个链表(按排序顺序)。next()移动到列表中的下一个节点,seek()向前/向下移动,跳过0到多个节点。init()从accumulo表配置和客户端提供任何必要的配置(迭代器可能在accumulo服务器中运行)。deepcopy()应该将当前迭代器的确切状态复制到新示例中(类似于object.clone())。
我还可以提供两个自定义迭代器的示例:
https://github.com/joshelser/accumulo-column-summing/
对给定列族中出现的数字执行中间求和
需要客户端的最终汇总
https://github.com/joshelser/rowswithoutcolumns
仅返回不包含提供的列集的行
使用wholerowiterator序列化方法将多个键值对作为单个键值对返回(需要在客户端上进行反序列化)
您还可以查看accumulo中提供的其他“面向用户”迭代器http://accumulo.apache.org/1.6/apidocs/org/apache/accumulo/core/iterators/user/package-summary.html

相关问题