code: public FaunusPipeline order(final TransformPipe.Order order, final String elementKey) {
          this.state.assertNotLocked();
          final Pair<String, Class<? extends WritableComparable>> pair = this.state.popProperty();
          if (null != pair) {
              this.compiler.addMapReduce(OrderMapReduce.Map.class,
                      null,
                      OrderMapReduce.Reduce.class,
                      OrderMapReduce.createComparator(order, pair.getB()),
                      pair.getB(),
                      Text.class,
                      Text.class,
                      pair.getB(),
                      OrderMapReduce.createConfiguration(this.state.getElementType(), pair.getA(), pair.getB(), elementKey));
              makeMapReduceString(OrderMapReduce.class, order.name(), elementKey);
          } else {
              throw new IllegalArgumentException("There is no specified property to order on");
          }
          this.state.lock();
          return this;
      }
docs: Order the previous property value results and emit them with another element property value.
  It is important to emit the previous property with a provided type else it is ordered lexigraphically.
  
  @param order      increasing and descending order
  @param elementKey the key of the element to associate it with
  @return the extended FaunusPipeline