code: def test_nnEstimator_multiOutput_cols(self):
      from pyspark.ml.linalg import Vectors
      from pyspark.sql import SparkSession
  
      spark = SparkSession.builder.getOrCreate()
  
      df = spark.createDataFrame(
          [
              (1.0, 2.0, 1.0, 2.0),
              (2.0, 2.0, 2.0, 1.0),
              (3.0, 2.0, 1.0, 2.0),
              (4.0, 1.0, 1.0, 2.0),
          ],
          ["user", "age", "label1", "label2"],
      )
      linear_model = Sequential().add(Linear(2, 2))
      mse_criterion = MSECriterion()
      est = Estimator.from_bigdl(
          model=linear_model,
          loss=mse_criterion,
          optimizer=Adam(),
          feature_preprocessing=SeqToTensor([2]),
          label_preprocessing=SeqToTensor([2]),
      )
      est.fit(
          df,
          1,
          batch_size=4,
          feature_cols=["user", "age"],
          label_cols=["label1", "label2"],
      )
      result = est.predict(df, feature_cols=["user", "age"])
      result_c = result.collect()
      assert type(result).__name__ == "DataFrame"
  
imports: import shutil
  from unittest import TestCase
  from bigdl.nn.criterion import *
  from bigdl.nn.layer import *
  from pyspark.sql.types import *
  from pyspark.sql.functions import col, udf
  from zoo.common.nncontext import *
  from zoo.feature.common import *
  from zoo.orca.learn.bigdl import Estimator
  from bigdl.optim.optimizer import Adam, SGD, ValidationSummary
  from zoo.pipeline.api.keras import layers
  from zoo.pipeline.api.keras.models import Model
  from zoo.orca.data import SparkXShards
  from zoo.orca.learn.metrics import Accuracy, MAE
  from zoo.orca.learn.trigger import EveryEpoch, SeveralIteration
  from zoo.orca.data.pandas import read_csv
label_desc: Use image node_id 7 for calling the TestEstimatorForKeras obj's underlying member method code with example usage: obj.test_nnEstimator_multiOutput_cols() without return types