accumulo-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dylan Hutchison <dhutc...@mit.edu>
Subject Re: Custom Iterator output
Date Sat, 18 Apr 2015 05:11:30 GMT
Hi Vaibhav,

It sounds like you want to emit a single value that is a function of all
the entries in the parent iterator.  In that case, the following template
should solve your problem, using the example of summing Values interpreted
as Longs:

/**
 * Emit one value that is a function of entries from the parent iterator.
 */
public class SingleOutputIterator extends WrappingIterator {
  private static final TypedValueCombiner.Encoder<Long> encoder = new
LongCombiner.StringEncoder();
  private Key emitKey;
  private Value emitValue;

  @Override
  public void seek(Range range, Collection<ByteSequence>
columnFamilies, boolean inclusive) throws IOException {
    super.seek(range, columnFamilies, inclusive);
    myFunction();
  }

  /**
   * Reads all entries from the parent iterator, computing the value
you want to emit.
   * Example given is summing the Values of parent entries,
interpreted as Longs.
   */
  private void myFunction() throws IOException {
    Long val = 0l;
    while (super.hasTop()) {
      val += encoder.decode(super.getTopValue().get());
      super.next();
    }
    emitKey = new Key(); // replace this with the key you want to emit
    emitValue = new Value(encoder.encode(val));
  }

  @Override
  public Key getTopKey() {
    return emitKey;
  }

  @Override
  public Value getTopValue() {
    return emitValue;
  }

  @Override
  public boolean hasTop() {
    return emitKey != null;
  }

  @Override
  public void next() throws IOException {
    emitKey = null;
    emitValue = null;
  }
}

Regards,
Dylan Hutchison



On Fri, Apr 17, 2015 at 8:05 PM, vaibhav thapliyal <
vaibhav.thapliyal.91@gmail.com> wrote:

> Hi,
>
> I also had this query that might be similar to shweta.
>
> What I want to do is process the key value pairs that I get from
> getTopKey() and getTopValue() methods and I want to output that value.
>
> Currently I was writing these values to tables from inside the iterators,
> but I read in the new manual that says that doing this isn't a good
> practice.
>
> For eg:
>
> If I have these entries in my table:
>
> 1 cf1:cq1 value1
> 2 cf2:cq2 value2
> 3 cf3:cq3 value3
> And suppose I sum the values(or do any opeation) of the row ids using the
> values that I get from the getTopKey().getRow() function and store this sum
> in a variable called "sum".
>
> So I want to output this variable. How do I go about this?
>
> Thanks
> Vaibhav
> On 17-Apr-2015 6:40 pm, <dlmarion@comcast.net> wrote:
>
>> via the getTopKey() and getTopValue() methods. [1] should be a simple
>> example.
>>
>> [1]
>> https://git-wip-us.apache.org/repos/asf?p=accumulo.git;a=blob;f=core/src/main/java/org/apache/accumulo/core/iterators/user/GrepIterator.java;h=043a729a778fc34d2ee87a0227056ffac81b7fe7;hb=refs/heads/master
>>
>> ------------------------------
>> *From: *"shweta.agrawal" <shweta.agrawal@orkash.com>
>> *To: *user@accumulo.apache.org
>> *Sent: *Friday, April 17, 2015 8:50:26 AM
>> *Subject: *Custom Iterator output
>>
>> Hi,
>>
>> I am working on custom iterator. I want to know, how do i get the output
>> from the custom iterators?
>>
>> Thanks and Regards
>> Shweta
>>
>>

Mime
View raw message