'Uploads a file to HDFS
:param source: Local path to file or folder. If a folder, all the files
inside of it will be uploaded (note that this implies that folders empty
of files will not be created remotely).
:type source: str
:param destination: PTarget HDFS path. If it already exists and is a
directory, files will be uploaded inside.
:type destination: str
:param overwrite: Overwrite any existing file or directory.
:type overwrite: bool
:param parallelism: Number of threads to use for parallelization. A value of
`0` (or negative) uses as many threads as there are files.
:type parallelism: int
:param \*\*kwargs: Keyword arguments forwarded to :meth:`upload`.'

def load_file(self, source, destination, overwrite=True, parallelism=1, **kwargs):

    c = self.get_conn()
    c.upload(hdfs_path=destination, local_path=source, overwrite=overwrite, n_threads=parallelism, **kwargs)
    logging.debug('Uploaded    file    {}    to    {}'.format(source, destination))
