}
public void transform() {
try {
final Iterator<Entry<Key, Value>> rawIt = scanner.iterator();
Writer writer = accumuloOperations.createWriter(tableName);
writer.write(new Iterable<Mutation>() {
@Override
public Iterator<Mutation> iterator() {
return new Iterator<Mutation>() {
LinkedList<Mutation> pendingOutput = new LinkedList<Mutation>();
@Override
public boolean hasNext() {
return !pendingOutput.isEmpty() || rawIt.hasNext();
}
@Override
public Mutation next() {
if (!pendingOutput.isEmpty()) {
return pendingOutput.removeFirst();
}
else if (rawIt.hasNext()) {
Entry<Key, Value> entry = rawIt.next();
Entry<Key, Value> newEntry = transformer.transform(Pair.of(entry.getKey(),entry.getValue()));
Mutation mutation = new Mutation(
entry.getKey().getRow());
mutation.putDelete(
entry.getKey().getColumnFamily(),
entry.getKey().getColumnQualifier(),
entry.getKey().getColumnVisibilityParsed(),
entry.getKey().getTimestamp());
pendingOutput.add(mutation);
mutation = new Mutation(
newEntry.getKey().getRow());
mutation.put(
newEntry.getKey().getColumnFamily(),
newEntry.getKey().getColumnQualifier(),
newEntry.getKey().getColumnVisibilityParsed(),
newEntry.getValue());
pendingOutput.add(mutation);
}
return pendingOutput.removeFirst();
}
@Override
public void remove() {
}
};
}
});
writer.close();
}
catch (Exception ex) {
LOGGER.error(
"Cannot perform transformation",
ex);