docs: def parse(cls, args):
          """
          Parse command line arguments to construct a dictionary of command
          parameters that can be used to create a command
  
          Args:
              `args`: sequence of arguments
  
          Returns:
              Dictionary that can be used in create method
  
          Raises:
              ParseError: when the arguments are not correct
          """
          try:
              (options, args) = cls.optparser.parse_args(args)
          except OptionParsingError as e:
              raise ParseError(e.msg, cls.optparser.format_help())
          except OptionParsingExit as e:
              return None
  
          SparkCommand.validate_program(options)
          SparkCommand.validate_script_location(options)
          SparkCommand.validate_cmdline(options)
          SparkCommand.validate_sql(options)
  
          if options.macros is not None:
              options.macros = json.loads(options.macros)
  
          v = vars(options)
          v["command_type"] = "SparkCommand"
          return v