code: def collect_output(mr_out_dir, out_file=None):
      
      if out_file is None:
          output = []
          for fn in iter_mr_out_files(mr_out_dir):
              with hdfs.open(fn, "rt") as f:
                  output.append(f.read())
          return "".join(output)
      else:
          block_size = 16777216
          with open(out_file, 'a') as o:
              for fn in iter_mr_out_files(mr_out_dir):
                  with hdfs.open(fn) as f:
                      data = f.read(block_size)
                      while len(data) > 0:
                          o.write(data)
                          data = f.read(block_size)
docs: Return all mapreduce output in ``mr_out_dir``.
  
      Append the output to ``out_file`` if provided.  Otherwise, return
      the result as a single string (it is the caller's responsibility to
      ensure that the amount of data retrieved fits into memory).