code: def test_NNModel_NNClassifier_pipeline_save_load(self):
      if self.sc.version.startswith(
          "2.3"
      ) or self.sc.version.startswith("2.4"):
          from pyspark.ml.feature import MinMaxScaler
          from pyspark.ml.linalg import Vectors
  
          df = self.sqlContext.createDataFrame(
              [
                  (Vectors.dense([2.0, 1.0]), 1.0),
                  (Vectors.dense([1.0, 2.0]), 2.0),
                  (Vectors.dense([2.0, 1.0]), 1.0),
                  (Vectors.dense([1.0, 2.0]), 2.0),
              ],
              ["features", "label"],
          )
  
          scaler = (
              MinMaxScaler()
              .setInputCol("features")
              .setOutputCol("scaled")
          )
          model = Sequential().add(Linear(2, 2))
          criterion = ClassNLLCriterion()
          classifier = (
              NNClassifier(model, criterion)
              .setBatchSize(4)
              .setLearningRate(0.01)
              .setMaxEpoch(1)
              .setFeaturesCol("scaled")
          )
  
          pipeline = Pipeline(stages=[scaler, classifier])
  
          pipeline_model = pipeline.fit(df)
  
          try:
              tmp_dir = tempfile.mkdtemp()
              modelPath = os.path.join(tmp_dir, "model")
              pipeline_model.save(modelPath)
              loaded_model = PipelineModel.load(modelPath)
              df2 = self.sqlContext.createDataFrame(
                  [
                      (Vectors.dense([2.0, 1.0]), 1.0),
                      (Vectors.dense([1.0, 2.0]), 2.0),
                      (Vectors.dense([2.0, 1.0]), 1.0),
                      (Vectors.dense([1.0, 2.0]), 2.0),
                  ],
                  ["features", "label"],
              )
  
              assert loaded_model.transform(df2).count() == 4
          finally:
              try:
                  shutil.rmtree(tmp_dir)  # delete directory
              except OSError as exc:
                  if (
                      exc.errno != errno.ENOENT
                  ):  # ENOENT - no such file or directory
                      raise
  
imports: import errno
  import shutil
  import pytest
  from bigdl.nn.criterion import *
  from bigdl.nn.layer import *
  from bigdl.optim.optimizer import *
  from numpy.testing import assert_allclose
  from pyspark.ml import Pipeline, PipelineModel
  from pyspark.ml.feature import MinMaxScaler
  from pyspark.ml.tuning import ParamGridBuilder
  from pyspark.sql.types import *
  from zoo.common.nncontext import *
  from zoo.feature.common import *
  from zoo.feature.image import *
  from zoo.pipeline.api.keras import layers
  from zoo.pipeline.api.keras.models import Model
  from zoo.pipeline.api.keras.optimizers import Adam
  from zoo.pipeline.nnframes import *
  from zoo.util.tf import *
label_desc: Use image node_id 37 for calling the TestNNClassifer obj's underlying member method code with example usage: obj.test_NNModel_NNClassifier_pipeline_save_load() without return types