code: def hashjoin(left, right, key=None, lkey=None, rkey=None, cache=True,
               lprefix=None, rprefix=None):
      
      
      lkey, rkey = keys_from_args(left, right, key, lkey, rkey)
      return HashJoinView(left, right, lkey=lkey, rkey=rkey, cache=cache,
                          lprefix=lprefix, rprefix=rprefix)
docs: Alternative implementation of :func:`petl.transform.joins.join`, where
      the join is executed by constructing an in-memory lookup for the right
      hand table, then iterating over rows from the left hand table.
      
      May be faster and/or more resource efficient where the right table is small
      and the left table is large.
      
      By default data from right hand table is cached to improve performance
      (only available when `key` is given).
  
      Left and right tables with different key fields can be handled via the
      `lkey` and `rkey` arguments.