<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parallel_split_combine(args, split_fn, parallel_fn, parallel_name, combiner, file_key, combine_arg_keys, split_outfile_i=-1):
 """Split, run split items in parallel then combine to output file. split_fn: Split an input file into parts for processing. Returns the name of the combined output file along with the individual split output names and arguments for the parallel function. parallel_fn: Reference to run_parallel function that will run single core, multicore, or distributed as needed. parallel_name: The name of the function, defined in bcbio.distributed.tasks/multitasks/ipythontasks to run in parallel. combiner: The name of the function, also from tasks, that combines the split output files into a final ready to run file. Can also be a callable function if combining is delayed. split_outfile_i: the location of the output file in the arguments generated by the split function. Defaults to the last item in the list. """

    args = [x[0] for x in args]
    split_args, combine_map, finished_out, extras = _get_split_tasks(args, split_fn, file_key,
                                                                     split_outfile_i)
    split_output = parallel_fn(parallel_name, split_args)
    if isinstance(combiner, six.string_types):
        combine_args, final_args = _organize_output(split_output, combine_map,
                                                    file_key, combine_arg_keys)
        parallel_fn(combiner, combine_args)
    elif callable(combiner):
        final_args = combiner(split_output, combine_map, file_key)
    return finished_out + final_args + extras