code: def get_or_load(archive_path):
      """Given a path returned by add_local_model(), this method will return a tuple of
      (loaded_model, local_model_path).
      If this Python process ever loaded the model before, we will reuse that copy.
      """
      if archive_path in SparkModelCache._models:
          SparkModelCache._cache_hits += 1
          return SparkModelCache._models[archive_path]
  
      local_model_dir = _SparkDirectoryDistributor.get_or_extract(
          archive_path
      )
  
      # We must rely on a supposed cyclic import here because we want this behavior
      # on the Spark Executors (i.e., don't try to pickle the load_model function).
      from mlflow.pyfunc import (
          load_model,
      )  # pylint: disable=cyclic-import
  
      SparkModelCache._models[archive_path] = (
          load_model(local_model_dir),
          local_model_dir,
      )
      return SparkModelCache._models[archive_path]
  
imports: from mlflow.utils._spark_utils import _SparkDirectoryDistributor
label_desc: Use image node_id 3 for calling the SparkModelCache obj's underlying member method code with example usage: obj.get_or_load(archive_path) and returns: SparkModelCache, SparkModelCache