code: def _metadata_schema() -> t.StructType:
      return t.StructType(
          [
              t.StructField("tenant_col", t.StringType(), False),
              t.StructField("user_col", t.StringType(), False),
              t.StructField("user_vec_col", t.StringType(), False),
              t.StructField("res_col", t.StringType(), False),
              t.StructField("res_vec_col", t.StringType(), False),
              t.StructField("output_col", t.StringType(), False),
              t.StructField(
                  "has_history_access_df", t.BooleanType(), False
              ),
              t.StructField(
                  "has_user2component_mappings_df",
                  t.BooleanType(),
                  False,
              ),
              t.StructField(
                  "has_res2component_mappings_df",
                  t.BooleanType(),
                  False,
              ),
              t.StructField(
                  "has_user_feature_vector_mapping_df",
                  t.BooleanType(),
                  False,
              ),
              t.StructField(
                  "has_res_feature_vector_mapping_df",
                  t.BooleanType(),
                  False,
              ),
          ],
      )
  
imports: import os
  from typing import List, Optional, Tuple
  from synapse.ml.cyber.anomaly.complement_access import ComplementAccessTransformer
  from synapse.ml.cyber.feature import indexers, scalers
  from synapse.ml.cyber.utils import spark_utils
  import numpy
  from pyspark import SQLContext
  from pyspark.ml import Estimator, Transformer
  from pyspark.ml.param.shared import Param, Params
  from pyspark.ml.recommendation import ALS
  from pyspark.sql import DataFrame, functions, types
label_desc: Use image node_id 2 for calling the AccessAnomalyModel obj's underlying member method code with example usage: obj._metadata_schema() and returns: t