private double[] getFeatureVectorFromArgs(TridentTuple queryTuple) {
   String args =
       queryTuple.getStringByField(EnsembleLearnerTopologyBuilder.drpcQueryArgsField.get(0));
   try {
     return MlStormFeatureVectorUtils.deserializeToFeatureVector(args);
   } catch (DecoderException e) {
     e.printStackTrace();
     throw new RuntimeException(e);
   } catch (IOException e) {
     e.printStackTrace();
     throw new RuntimeException(e);
   } catch (ClassNotFoundException e) {
     e.printStackTrace();
     throw new RuntimeException(e);
   }
 }
 @Override
 public List<Integer> batchRetrieve(
     final MlStormWekaState binaryClassifierState, final List<TridentTuple> queryTuples) {
   List<Integer> queryResults = new ArrayList<Integer>();
   for (TridentTuple queryTuple : queryTuples) {
     double[] fv = getFeatureVectorFromArgs(queryTuple);
     final Instance instance = MlStormFeatureVectorUtils.buildWekaInstance(fv);
     try {
       final int classification = (int) binaryClassifierState.predict(instance);
       queryResults.add(classification);
     } catch (Exception e) {
       e.printStackTrace();
     }
   }
   return queryResults;
 }
    @Override
    public List<Map.Entry<Double, double[]>> batchRetrieve(
        final MlStormWekaState clustererState, final List<TridentTuple> queryTuples) {
      ArrayList<Map.Entry<Double, double[]>> queryResults =
          new ArrayList<Map.Entry<Double, double[]>>();
      for (TridentTuple query : queryTuples) {

        //noinspection unchecked
        final Map<Integer, Map.Entry<Integer, double[]>> voteMap =
            (Map<Integer, Map.Entry<Integer, double[]>>) query.getValueByField("voteMap");
        final double[] fv = new double[numPartitions];

        for (Integer key : voteMap.keySet()) {
          fv[key] = voteMap.get(key).getKey();
        }

        try {
          Instance testInstance = MlStormFeatureVectorUtils.buildWekaInstance(fv);
          double[] distribution = null;
          double result = clustererState.predict(testInstance);
          queryResults.add(new KeyValuePair<Double, double[]>(result, distribution));

        } catch (IOException e) {
          e.printStackTrace();
        } catch (ClassNotFoundException e) {
          e.printStackTrace();
        } catch (Exception e) {
          if (e.toString().contains(MlStormWekaState.NOT_READY_TO_PREDICT)) {
            System.err.println(
                MessageFormat.format(
                    "Not Ready yet! Continue training with - {0}", Arrays.toString(fv)));
            queryResults.add(new KeyValuePair<Double, double[]>(fv[fv.length - 1], null));
          } else {
            throw new IllegalStateException(e);
          }
        }
      }
      return queryResults;
    }