如何覆盖Accumulo中SortedKeyValueIterator接口的功能?
How to override the functions of SortedKeyValueIterator interface in Accumulo?
我正在尝试创建自定义迭代器,但由于没有可用的教程,我查看了 Accumulo github 页面上提供的代码。
我发现所有 classes 都实现了 SortedKeyValueIterator 并覆盖了它的功能。
这些函数的作用是什么?在创建实现 SortedKeyValueIterator 的新 class 时覆盖这些函数时应该采用什么方法。
这是我试图理解的 RowFilter class 的示例代码。
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;
}
我想知道这段代码的作用,如果我想要另一个 class 来实现 SortedKeyValueIterator,我应该如何重写这些函数。
首先查看有关 SortedKeyValueIterator 的 Javadoc -- http://accumulo.apache.org/1.6/apidocs/。对于每个方法应该做的事情,这是一个很好的起点。
编写迭代器的一个很好的类比是将您的 Accumulo table(迭代器在其上运行)视为单链表(按排序顺序)。 next() 移动到列表中的下一个节点,seek() 移动 forward/down 跳过零到许多节点。 init() 从 Accumulo table 配置和客户端提供任何必要的配置(您的迭代器可能在 Accumulo 服务器中 运行 )。 deepCopy() 应该将当前迭代器的确切状态复制到一个新实例中(类似于 Object.clone()).
我还可以提供两个自定义迭代器的例子:
- https://github.com/joshelser/accumulo-column-summing/
- 对给定列族中出现的数字执行中间求和
- 需要在客户端进行最终求和
- https://github.com/joshelser/RowsWithoutColumns
- 只有 returns 行不包含一组提供的列
- 使用 WholeRowIterator 序列化方法 return 将多个键值对作为单个键值对(需要在客户端反序列化)
您还可以查看 Accumulo http://accumulo.apache.org/1.6/apidocs/org/apache/accumulo/core/iterators/user/package-summary.html
中提供的其他 "user-facing" 迭代器
我正在尝试创建自定义迭代器,但由于没有可用的教程,我查看了 Accumulo github 页面上提供的代码。
我发现所有 classes 都实现了 SortedKeyValueIterator 并覆盖了它的功能。
这些函数的作用是什么?在创建实现 SortedKeyValueIterator 的新 class 时覆盖这些函数时应该采用什么方法。
这是我试图理解的 RowFilter class 的示例代码。
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;
}
我想知道这段代码的作用,如果我想要另一个 class 来实现 SortedKeyValueIterator,我应该如何重写这些函数。
首先查看有关 SortedKeyValueIterator 的 Javadoc -- http://accumulo.apache.org/1.6/apidocs/。对于每个方法应该做的事情,这是一个很好的起点。
编写迭代器的一个很好的类比是将您的 Accumulo table(迭代器在其上运行)视为单链表(按排序顺序)。 next() 移动到列表中的下一个节点,seek() 移动 forward/down 跳过零到许多节点。 init() 从 Accumulo table 配置和客户端提供任何必要的配置(您的迭代器可能在 Accumulo 服务器中 运行 )。 deepCopy() 应该将当前迭代器的确切状态复制到一个新实例中(类似于 Object.clone()).
我还可以提供两个自定义迭代器的例子:
- https://github.com/joshelser/accumulo-column-summing/
- 对给定列族中出现的数字执行中间求和
- 需要在客户端进行最终求和
- https://github.com/joshelser/RowsWithoutColumns
- 只有 returns 行不包含一组提供的列
- 使用 WholeRowIterator 序列化方法 return 将多个键值对作为单个键值对(需要在客户端反序列化)
您还可以查看 Accumulo http://accumulo.apache.org/1.6/apidocs/org/apache/accumulo/core/iterators/user/package-summary.html
中提供的其他 "user-facing" 迭代器