code: def filter_columns(self, schema):
      if self.args.keep_columns and self.args.ignore_columns:
          raise ValueError(
              "You cannot use both --keep_columns and --ignore_columns"
          )
      if self.args.keep_columns:
          schema = schema.select_by_name(self.args.keep_columns)
      elif self.args.ignore_columns:
          schema = schema.excluding_by_name(self.args.ignore_columns)
      return schema
  
imports: import json
  import logging
  import os
  from datetime import datetime
  import merlin.models.tf
  import numpy
  import tensorflow
  from merlin.io.dataset import Dataset
  from merlin.models.tf.logging.callbacks import ExamplesPerSecondCallback, WandbLogger
  from merlin.models.tf.transforms.negative_sampling import InBatchNegatives
  from merlin.schema.tags import Tags
  from .args_parsing import Task, parse_arguments
  from .mtl import get_mtl_loss_weights, get_mtl_prediction_tasks
  from .ranking_models import get_model
label_desc: Use image node_id 4 for calling the RankingTrainEvalRunner obj's underlying member method code with example usage: obj.filter_columns(schema) and returns: schema