from __future__ import annotations
import robin_sparkless as rs
F = rs
def test_posexplode_accepts_column_name_string() -> None:
spark = F.SparkSession.builder().app_name("test_280").get_or_create()
data = [
{"Name": "Alice", "Values": [10, 20]},
{"Name": "Bob", "Values": [30, 40]},
]
df = spark.createDataFrame(data, [("Name", "string"), ("Values", "array")])
pos_col, val_col = F.posexplode("Values")
assert pos_col is not None and val_col is not None
out = df.select(pos_col.alias("pos"), val_col.alias("val")).collect()
assert len(out) == 4
assert all("pos" in r and "val" in r for r in out)
vals = [r["val"] for r in out]
assert vals == [10, 20, 30, 40]
def test_posexplode_column_still_works() -> None:
spark = F.SparkSession.builder().app_name("test_280").get_or_create()
data = [{"Name": "Alice", "Values": [1, 2, 3]}]
df = spark.createDataFrame(data, [("Name", "string"), ("Values", "array")])
pos_col, val_col = F.posexplode(F.col("Values"))
out = df.select(pos_col.alias("pos"), val_col.alias("val")).collect()
assert len(out) == 3
assert [r["val"] for r in out] == [1, 2, 3]