<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_resource(self, source_r, abs_path=False):
 """The CSV package has no resources, so we just need to resolve the URLs to them. Usually, the CSV package is built from a file system ackage on a publically acessible server. """


        from itertools import islice
        from metapack.exc import MetapackError
        from os.path import splitext

        # Refetch the resource ... IIRC b/c the source_r resource may actually be from
        # a different package. So r is the resource we want to possibly modify in this package,
        # while source_r is from a different souce package, whose data is being loaded into this
        # one.

        r = self.datafile(source_r.name)

        if self.reuse_resources:
            self.prt("Re-using data for '{}' ".format(r.name))
        else:
            self.prt("Loading data for '{}' ".format(r.name))

        if not r.name:
            raise MetapackError(f"Resource/reference term has no name: {str(r)}")

        # Special handing for SQL should not be done here; it should be done in Rowgenerators, probably.
        if r.term_is('root.sql'):
            new_r = self.doc['Resources'].new_term('Root.Datafile', '')
            new_r.name = r.name

            self.doc.remove_term(r)

            r = new_r

        r.url = 'data/' + r.name + '.csv' # Re-writing the URL for the resource.

        path = join(self.package_path.path, r.url)

        makedirs(dirname(path), exist_ok=True)

        if not self.reuse_resources or not exists(path):

            if self.reuse_resources:
                self.prt("Resource {} doesn't exist, rebuilding".format(path))

            if exists(path):
                remove(path)

            gen = islice(source_r, 1, None)
            headers = source_r.headers
            self.write_csv(path, headers, gen)

        for k, v in source_r.post_iter_meta.items():
            r[k] = v

        try:
            if source_r.errors:
                for col_name, errors in source_r.errors.items():
                    self.warn("ERRORS for column '{}' ".format(col_name))
                    for e in islice(errors,5):
                        self.warn('   {}'.format(e))
                    if len(errors) > 5:
                        self.warn("... and {} more ".format(len(errors)-5))
        except AttributeError:
            pass # Maybe generator does not track errors

        if source_r.errors:
            self.err("Resource processing generated conversion errors")

        # Writing between resources so row-generating programs and notebooks can
        # access previously created resources. We have to clean the doc before writing it

        ref = self._write_doc()

        # What a wreck ... we also have to get rid of the 'Transform' values, since the CSV files
        # that are written don't need them, and a lot of intermediate processsing ( specifically,
        # jupyter Notebooks, ) does not load them.
        p = FileSystemPackageBuilder(ref, self.package_root)
        p._clean_doc()

        ref = p._write_doc()