<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def load_table_from_dataframe( self, dataframe, destination, num_retries=_DEFAULT_NUM_RETRIES, job_id=None, job_id_prefix=None, location=None, project=None, job_config=None, ):
 """Upload the contents of a table from a pandas DataFrame. Similar to :meth:`load_table_from_uri`, this method creates, starts and returns a :class:`~google.cloud.bigquery.job.LoadJob`. Arguments: dataframe (pandas.DataFrame):
 A :class:`~pandas.DataFrame` containing the data to load. destination (google.cloud.bigquery.table.TableReference):
 The destination table to use for loading the data. If it is an existing table, the schema of the :class:`~pandas.DataFrame` must match the schema of the destination table. If the table does not yet exist, the schema is inferred from the :class:`~pandas.DataFrame`. If a string is passed in, this method attempts to create a table reference from a string using :func:`google.cloud.bigquery.table.TableReference.from_string`. Keyword Arguments: num_retries (int, optional):
 Number of upload retries. job_id (str, optional):
 Name of the job. job_id_prefix (str, optional):
 The user-provided prefix for a randomly generated job ID. This parameter will be ignored if a ``job_id`` is also given. location (str):
 Location where to run the job. Must match the location of the destination table. project (str, optional):
 Project ID of the project of where to run the job. Defaults to the client's project. job_config (google.cloud.bigquery.job.LoadJobConfig, optional):
 Extra configuration options for the job. Returns: google.cloud.bigquery.job.LoadJob: A new load job. Raises: ImportError: If a usable parquet engine cannot be found. This method requires :mod:`pyarrow` or :mod:`fastparquet` to be installed. """

        job_id = _make_job_id(job_id, job_id_prefix)

        if job_config is None:
            job_config = job.LoadJobConfig()
        job_config.source_format = job.SourceFormat.PARQUET

        if location is None:
            location = self.location

        tmpfd, tmppath = tempfile.mkstemp(suffix="_job_{}.parquet".format(job_id[:8]))
        os.close(tmpfd)

        try:
            dataframe.to_parquet(tmppath)

            with open(tmppath, "rb") as parquet_file:
                return self.load_table_from_file(
                    parquet_file,
                    destination,
                    num_retries=num_retries,
                    rewind=True,
                    job_id=job_id,
                    job_id_prefix=job_id_prefix,
                    location=location,
                    project=project,
                    job_config=job_config,
                )

        finally:
            os.remove(tmppath)