Github user jkbradley commented on a diff in the pull request:

    https://github.com/apache/spark/pull/10469#discussion_r49408926
  
    --- Diff: python/pyspark/ml/util.py ---
    @@ -52,3 +71,141 @@ def _randomUID(cls):
             concatenates the class name, "_", and 12 random hex chars.
             """
             return cls.__name__ + "_" + uuid.uuid4().hex[12:]
    +
    +
    +@inherit_doc
    +class MLWriter(object):
    +    """
    +    Abstract class for utility classes that can save ML instances.
    +
    +    .. versionadded:: 2.0.0
    +    """
    +
    +    def __init__(self, instance):
    +        self._jwrite = instance._java_obj.write()
    +
    +    @since("2.0.0")
    +    def save(self, path):
    +        """Saves the ML instances to the input path."""
    +        self._jwrite.save(path)
    +
    +    @since("2.0.0")
    +    def overwrite(self):
    +        """Overwrites if the output path already exists."""
    +        self._jwrite.overwrite()
    +        return self
    +
    +    @since("2.0.0")
    +    def context(self, sqlContext):
    +        """Sets the SQL context to use for saving."""
    +        self._jwrite.context(sqlContext._ssql_ctx)
    +        return self
    +
    +
    +@inherit_doc
    +class MLWritable(object):
    +    """
    +    Mixin for ML instances that provide MLWriter through their Scala
    +    implementation.
    +
    +    .. versionadded:: 2.0.0
    +    """
    +
    +    @since("2.0.0")
    +    def write(self):
    +        """Returns an MLWriter instance for this ML instance."""
    +        return MLWriter(self)
    +
    +    @since("2.0.0")
    +    def save(self, path):
    +        """Save this ML instance to the given path, a shortcut of 
`write().save(path)`."""
    +        if not isinstance(path, basestring):
    +            raise TypeError("path should be a basestring, got type %s" % 
type(path))
    +        self._java_obj.save(path)
    +
    +
    +@inherit_doc
    +class MLReader(object):
    +    """
    +    Abstract class for utility classes that can load ML instances.
    +
    +    .. versionadded:: 2.0.0
    +    """
    +
    +    def __init__(self, instance):
    +        self._instance = instance
    +        self._jread = instance._java_obj.read()
    +
    +    @since("2.0.0")
    +    def load(self, path):
    +        """Loads the ML component from the input path."""
    +        self._instance.load(path)
    --- End diff --
    
    The load implementation should go here.  To be analogous to the Scala 
implementation, we should have Model/Estimator.load methods call 
```[instance].read().load(...)```.  That will allow us to add options to the 
reader later on.
    
    It will simplify things if we make MLReader only applicable for JavaWrapper 
subclasses.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to