Example #1
0
File: join.py Project: cpcloud/ibis
def execute_asof_join(op, left, right, by, tolerance, predicates, **kwargs):
    overlapping_columns = frozenset(left.columns) & frozenset(right.columns)
    left_on, right_on = _extract_predicate_names(predicates)
    left_by, right_by = _extract_predicate_names(by)
    _validate_columns(overlapping_columns, left_on, right_on, left_by,
                      right_by)

    assert 0 <= len(left_on) <= 1, f"len(left_on) == {len(left_on)}"
    assert 0 <= len(right_on) <= 1, f"len(right_on) == {len(right_on)}"

    on = left_on if left_on == right_on else None
    return dd.merge_asof(
        left=left,
        right=right,
        # NB: dask 2022.4.1 contains a bug from
        # https://github.com/dask/dask/pull/8857 that keeps a column if `on` is
        # non-empty without checking whether `left_on` is non-empty, this
        # check works around that
        on=on,
        left_on=left_on if on is None else None,
        right_on=right_on if on is None else None,
        left_by=left_by or None,
        right_by=right_by or None,
        tolerance=tolerance,
    )
Example #2
0
def execute_asof_join(op, left, right, tolerance, **kwargs):
    overlapping_columns = frozenset(left.columns) & frozenset(right.columns)
    left_on, right_on = _extract_predicate_names(op.predicates)
    left_by, right_by = _extract_predicate_names(op.by)
    _validate_columns(overlapping_columns, left_on, right_on, left_by,
                      right_by)

    return dd.merge_asof(
        left=left,
        right=right,
        left_on=left_on,
        right_on=right_on,
        left_by=left_by or None,
        right_by=right_by or None,
        tolerance=tolerance,
    )