class_docstr: Provides arguments to Spark UDFs.
docstr: Provide a DataFrame for each requested input.
  
  Args:
      udf (Callable[..., T]): The feature_processor wrapped user function.
      fp_config (FeatureProcessorConfig): The configuration for the feature_processor.
  
  Raises:
      ValueError: If the signature of the UDF does not match the fp_config.inputs.
      ValueError: If there are no inputs provided to the user defined function.
  
  Returns:
      OrderedDict[str, DataFrame]: The loaded data sources, in the same order as
          fp_config.inputs.
docstr_tok: ["Provide","a","DataFrame","for","each","requested","input",".","Args",":","udf","(","Callable","[","...",",","T","]",")",":","The","feature_processor","wrapped","user","function",".","fp_config","(","FeatureProcessorConfig",")",":","The","configuration","for","the","feature_processor",".","Raises",":","ValueError",":","If","the","signature","of","the","UDF","does","not","match","the","fp_config.inputs",".","ValueError",":","If","there","are","no","inputs","provided","to","the","user","defined","function",".","Returns",":","OrderedDict","[","str",",","DataFrame","]",":","The","loaded","data","sources",",","in","the","same","order","as","fp_config.inputs","."]
code: def provide_input_args(
      self,
      udf: Callable[..., DataFrame],
      fp_config: FeatureProcessorConfig,
  ) -> OrderedDict[str, DataFrame]:
      """Provide a DataFrame for each requested input.
  
      Args:
          udf (Callable[..., T]): The feature_processor wrapped user function.
          fp_config (FeatureProcessorConfig): The configuration for the feature_processor.
  
      Raises:
          ValueError: If the signature of the UDF does not match the fp_config.inputs.
          ValueError: If there are no inputs provided to the user defined function.
  
      Returns:
          OrderedDict[str, DataFrame]: The loaded data sources, in the same order as
              fp_config.inputs.
      """
      udf_parameter_names = list(signature(udf).parameters.keys())
      udf_input_names = self._get_input_parameters(udf_parameter_names)
      udf_params = self.params_loader.get_parameter_args(fp_config).get(
          self.PARAMS_ARG_NAME, None
      )
  
      if len(udf_input_names) == 0:
          raise ValueError(
              "Expected at least one input to the user defined function."
          )
  
      if len(udf_input_names) != len(fp_config.inputs):
          raise ValueError(
              f"The signature of the user defined function does not match the list of inputs"
              f" requested. Expected {len(fp_config.inputs)} parameter(s)."
          )
  
      return OrderedDict(
          (
              input_name,
              self._load_data_frame(
                  data_source=input_uri, params=udf_params
              ),
          )
          for (input_name, input_uri) in zip(
              udf_input_names, fp_config.inputs
          )
      )
  
imports: from __future__ import absolute_import
  from abc import ABC, abstractmethod
  from inspect import signature
  from typing import Any, Callable, Dict, Generic, List, OrderedDict, TypeVar, Union, Optional
  import attr
  from pyspark.sql import DataFrame, SparkSession
  from sagemaker.feature_store.feature_processor._data_source import CSVDataSource, FeatureGroupDataSource, ParquetDataSource, BaseDataSource, PySparkDataSource
  from sagemaker.feature_store.feature_processor._feature_processor_config import FeatureProcessorConfig
  from sagemaker.feature_store.feature_processor._input_loader import SparkDataFrameInputLoader
  from sagemaker.feature_store.feature_processor._params_loader import ParamsLoader
  from sagemaker.feature_store.feature_processor._spark_factory import SparkSessionFactory
label_desc: Use image node_id 1 for calling the SparkArgProvider obj's underlying member method code with example usage: obj.provide_input_args(udf, fp_config) and returns: OrderedDict