docs: public List<Writable> joinExamples(List<Writable> leftExample, List<Writable> rightExample) {
  
          List<Writable> out = new ArrayList<>();
          if (leftExample == null) {
              if (rightExample == null)
                  throw new IllegalArgumentException(
                                  "Cannot join examples: Both examples are null (max 1 allowed to be null)");
  
              //Insert a set of null writables...
              //Complication here: the **key values** should still exist (we have to extract them from second value)
              int nLeft = leftSchema.numColumns();
              List<String> leftNames = leftSchema.getColumnNames();
              int keysSoFar = 0;
              for (int i = 0; i < nLeft; i++) {
                  String name = leftNames.get(i);
                  if (ArrayUtils.contains(joinColumnsLeft, name)) {
                      //This would normally be where the left key came from...
                      //So let's get the key value from the *right* example
                      String rightKeyName = joinColumnsRight[keysSoFar];
                      int idxOfRightKey = rightSchema.getIndexOfColumn(rightKeyName);
                      out.add(rightExample.get(idxOfRightKey));
                  } else {
                      //Not a key column, so just add a NullWritable
                      out.add(NullWritable.INSTANCE);
                  }
              }
          } else {
              out.addAll(leftExample);
          }
  
          List<String> rightNames = rightSchema.getColumnNames();
          if (rightExample == null) {
              //Insert a set of null writables...
              int nRight = rightSchema.numColumns();
              for (int i = 0; i < nRight; i++) {
                  String name = rightNames.get(i);
                  if (ArrayUtils.contains(joinColumnsRight, name))
                      continue; //Skip the key column value
                  out.add(NullWritable.INSTANCE);
              }
          } else {
              //Add all values from right, except for key columns...
              for (int i = 0; i < rightExample.size(); i++) {
                  String name = rightNames.get(i);
                  if (ArrayUtils.contains(joinColumnsRight, name))
                      continue; //Skip the key column value
                  out.add(rightExample.get(i));
              }
          }
  
          return out;
      }