code: private Object getRawValue(String columnName, Row row) {
          try {
              return getRawValue(columnName, row.getMap());
          } catch (ColumnNotFoundException e) {
              // Check if there is an implicit column override then return it
              try {
                  ImplicitColumn implicitColumn = ImplicitColumn.valueOf(columnName.toLowerCase());
                  return getImplicitValue(implicitColumn, row);
              } catch (IllegalArgumentException notImplicit) {
                  // Object not found and column is not implicit.  Return null.
                  return null;
              }
          }
      }
docs: Returns the value for a given row.  Hierarchical elements can be reached using paths like keys.  For example:
  
  <code>getRawValue("about/~id")</code>
  
  is roughly equivalent to returning:
  
  <code>row.getMap().get("about").get("~id")</code>
  
  with additional null and type checking along the path.
  
  Additionally, most intrinsics can be referenced without the leading tilde, and "json" will return the row as the
  original JSON string.  Note that preference is always given to an explicit value.  For example, if the row
  contains a field called "id" then calling this method with column name "id" will return that value, even if it is
  set to null.  If there is no field called "id" then calling this method with column name "id" will return the
  intrinsic value for "~id".