code: def read(self) -> "DataFrame":
      self.artifact.consumed()
      logger.debug(
          f"start reading dataframe from artifact: {self.artifact}"
      )
      # if self.artifact.uri.scheme == "file":
      #     import inspect
      #
      #     from fate.arch import dataframe
      #
      #     kwargs = {}
      #     p = inspect.signature(dataframe.CSVReader.__init__).parameters
      #     parameter_keys = p.keys()
      #     for k, v in self.artifact.metadata.metadata.items():
      #         if k in parameter_keys:
      #             kwargs[k] = v
      #
      #     return dataframe.CSVReader(**kwargs).to_frame(self.ctx, self.artifact.uri.path)
  
      from fate.arch import dataframe
  
      table = self.ctx.computing.load(
          uri=self.artifact.uri,
          schema=self.artifact.metadata.metadata.get("schema", None),
          options=self.artifact.metadata.metadata.get("options", None),
      )
      df = dataframe.deserialize(self.ctx, table)
      logger.debug(
          f"read dataframe from artifact: <uri={self.artifact.uri}, type_name={self.artifact.type_name}>"
      )
      return df
  
file_path: FATE/python/fate/components/core/component_desc/artifacts/data/_dataframe.py
imports: import logging
  import typing
  from fate.components.core.essential import DataframeArtifactType
  from .._base_type import ArtifactDescribe, DataOutputMetadata, Metadata, _ArtifactType, _ArtifactTypeReader, _ArtifactTypeWriter
label_desc: Use image node_id 1 for calling the DataframeReader obj's underlying member method code with example usage: obj.read() and returns: df