from __future__ import annotations
from sparkless.testing import get_imports
_imports = get_imports()
F = _imports.F
def test_select_struct_field_dot_notation_string(spark) -> None:
df = spark.createDataFrame(
[
{"StructValue": {"e1": 42, "e2": "a"}},
{"StructValue": {"e1": 10, "e2": "b"}},
],
"StructValue struct<e1:int,e2:string>",
)
out = df.select("StructValue.e1").collect()
assert len(out) == 2
assert out[0]["e1"] == 42
assert out[1]["e1"] == 10
def test_select_struct_field_dot_notation_col(spark) -> None:
df = spark.createDataFrame(
[{"StructValue": {"e1": 100, "e2": "x"}}],
"StructValue struct<e1:int,e2:string>",
)
out = df.select(F.col("StructValue.e1")).collect()
assert len(out) == 1
assert out[0]["e1"] == 100
def test_select_struct_field_multiple_dots(spark) -> None:
df = spark.createDataFrame(
[{"outer": {"inner": {"leaf": 7}}}],
"outer struct<inner:struct<leaf:int>>",
)
out = df.select("outer.inner.leaf").collect()
assert len(out) == 1
assert out[0]["leaf"] == 7