Files
2026-07-13 13:17:40 +08:00

69 lines
2.2 KiB
Python

import sys
import pandas as pd
import pyarrow as pa
import pytest
import ray
from ray.data._internal.execution.interfaces.ref_bundle import (
_ref_bundles_iterator_to_block_refs_list,
)
from ray.data.tests.conftest import * # noqa
from ray.data.tests.util import extract_values
from ray.tests.conftest import * # noqa
@pytest.mark.parametrize(
"input_blocks",
[
[pd.DataFrame({"column": ["spam"]}), pd.DataFrame({"column": ["ham", "eggs"]})],
[
pa.Table.from_pydict({"column": ["spam"]}),
pa.Table.from_pydict({"column": ["ham", "eggs"]}),
],
],
)
def test_from_blocks(input_blocks, ray_start_regular_shared):
ds = ray.data.from_blocks(input_blocks)
bundles = ds.iter_internal_ref_bundles()
output_blocks = ray.get(_ref_bundles_iterator_to_block_refs_list(bundles))
assert len(input_blocks) == len(output_blocks)
assert all(
input_block.equals(output_block)
for input_block, output_block in zip(input_blocks, output_blocks)
)
def test_from_items(ray_start_regular_shared):
ds = ray.data.from_items(["hello", "world"])
assert extract_values("item", ds.take()) == ["hello", "world"]
assert isinstance(next(iter(ds.iter_batches(batch_format=None))), pa.Table)
@pytest.mark.parametrize("parallelism", list(range(1, 21)))
def test_from_items_parallelism(ray_start_regular_shared, parallelism):
# Test that specifying parallelism yields the expected number of blocks.
n = 20
records = [{"a": i} for i in range(n)]
ds = ray.data.from_items(records, override_num_blocks=parallelism)
out = ds.take_all()
assert out == records
assert ds._logical_plan.initial_num_blocks() == parallelism
def test_from_items_parallelism_truncated(ray_start_regular_shared):
# Test that specifying parallelism greater than the number of items is truncated to
# the number of items.
n = 10
parallelism = 20
records = [{"a": i} for i in range(n)]
ds = ray.data.from_items(records, override_num_blocks=parallelism)
out = ds.take_all()
assert out == records
assert ds._logical_plan.initial_num_blocks() == n
if __name__ == "__main__":
sys.exit(pytest.main(["-v", __file__]))