Deploy a function to a partition in Ray.

    Args:
        func: The function to apply.
        partition: The partition to apply the function to.
        kwargs: A dictionary of keyword arguments for the function.

    Returns:
        The result of the function.

def deploy_ray_func(func, partition, kwargs):
    """Deploy a function to a partition in Ray.

    Args:
        func: The function to apply.
        partition: The partition to apply the function to.
        kwargs: A dictionary of keyword arguments for the function.

    Returns:
        The result of the function.
    """
    try:
        result = func(partition, **kwargs)
    # Sometimes Arrow forces us to make a copy of an object before we operate
    # on it. We don't want the error to propagate to the user, and we want to
    # avoid copying unless we absolutely have to.
    except Exception:
        result = func(partition.to_pandas(), **kwargs)
        if isinstance(result, pandas.Series):
            result = pandas.DataFrame(result).T
        if isinstance(result, pandas.DataFrame):
            return pyarrow.Table.from_pandas(result)
    return result