[ 
https://issues.apache.org/jira/browse/SPARK-58987?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Hyukjin Kwon updated SPARK-58987:
---------------------------------
    Description: 
Delivered together in apache/spark-connect-rust#54. Three axes:

h2. 1. Faster parity CI (ours-only + manifest)
Run the official sql/tests/connect suite ONLY through our Rust client, 
deselecting a checked-in manifest of known environmental failures (tests the 
reference client also fails in this single-node CI env), with a per-file retry 
for the flaky streaming-listener tests. Drops the per-file reference run, 
roughly halving the job.

h2. 2. Rust coverage gate (>= 90%), all crates incl. pyspark-rs
scripts/rust_coverage.sh measures merged coverage with cargo-llvm-cov (the 
instrumented extension driven by the Python drop-in suite); a rust-coverage CI 
job enforces the threshold. scripts/e2e_wrapper.py is a 124-op drop-in API 
exercise.

h2. 3. Drop-in pyspark API fidelity (also SPARK-58998)
The skin re-exported the Rust PyO3 classes directly and diverged from reference 
pyspark. Restored Column.isNull/isNotNull/getField; DataFrame 
where/filter(str), withColumns, hint, intersectAll, exceptAll, rollup, cube, 
sortWithinPartitions, withColumnsRenamed, colRegex, describe, summary, 
cache/persist/unpersist, explain, createOrReplaceTempView, dropna/fillna(dict), 
unpivot/melt, repartition(n,*cols), head(n), column attribute access, stat; 
SparkSession conf/read/catalog-property; GroupedData.pivot; Row(**kwargs); 
createDataFrame with DDL/StructType/Row.

h2. 4. Core bug fixes + complete Arrow type mapping
functions coalesce/array/concat were nullary with empty column lists -> made 
variadic. The Sort plan dropped bare (non-SortOrder) columns -> default 
ascending. Unified the Arrow decoders and completed the mapping 
(Decimal128/256, FixedSizeBinary, all int/uint widths, all timestamp units 
incl. TimestampNTZ, Time32/64, intervals, list/struct/map). All fixes in the 
Rust core, exposed in the Python drop-in.

  was:
The Connect parity gate runs all 84 official connect test files twice each 
(reference pyspark AND our client via transport injection) against one live 
server, ~1h20m-2h. Now that the client is at full parity, the reference run 
only serves to compute a per-file environmental-failure baseline.

h2. Changes
* Parity gate: run ONLY our client against the official connect suite, 
deselecting a checked-in per-test manifest of known environmental failures 
(tests the reference client also fails in this single-node pure-Connect CI env, 
each annotated with the reason). Drops the reference run, roughly halving 
CI/build time. The manifest is regenerated from a reference run when the Spark 
version bumps.
* Add in-repo Rust tests (plan-building golden + e2e_integration) covering the 
functionality behind the env-skipped official tests, so skipping them loses no 
real coverage.
* Enforce 100% Rust test coverage across all crates (spark-connect-core, 
spark-connect, and the pyspark-rs PyO3 layer measured via the Python suite 
driving an instrumented extension) via a cargo-llvm-cov CI gate; fill the gaps 
with unit/integration tests.

        Summary: [spark-connect-rust] Faster parity CI, Rust coverage gate, and 
drop-in pyspark API fidelity  (was: [spark-connect-rust] Faster Connect parity 
CI (ours-only + skip manifest) and 100% Rust coverage)

> [spark-connect-rust] Faster parity CI, Rust coverage gate, and drop-in 
> pyspark API fidelity
> -------------------------------------------------------------------------------------------
>
>                 Key: SPARK-58987
>                 URL: https://issues.apache.org/jira/browse/SPARK-58987
>             Project: Spark
>          Issue Type: Improvement
>          Components: Project Infra
>    Affects Versions: 5.0.0
>            Reporter: Hyukjin Kwon
>            Priority: Major
>              Labels: pull-request-available
>
> Delivered together in apache/spark-connect-rust#54. Three axes:
> h2. 1. Faster parity CI (ours-only + manifest)
> Run the official sql/tests/connect suite ONLY through our Rust client, 
> deselecting a checked-in manifest of known environmental failures (tests the 
> reference client also fails in this single-node CI env), with a per-file 
> retry for the flaky streaming-listener tests. Drops the per-file reference 
> run, roughly halving the job.
> h2. 2. Rust coverage gate (>= 90%), all crates incl. pyspark-rs
> scripts/rust_coverage.sh measures merged coverage with cargo-llvm-cov (the 
> instrumented extension driven by the Python drop-in suite); a rust-coverage 
> CI job enforces the threshold. scripts/e2e_wrapper.py is a 124-op drop-in API 
> exercise.
> h2. 3. Drop-in pyspark API fidelity (also SPARK-58998)
> The skin re-exported the Rust PyO3 classes directly and diverged from 
> reference pyspark. Restored Column.isNull/isNotNull/getField; DataFrame 
> where/filter(str), withColumns, hint, intersectAll, exceptAll, rollup, cube, 
> sortWithinPartitions, withColumnsRenamed, colRegex, describe, summary, 
> cache/persist/unpersist, explain, createOrReplaceTempView, 
> dropna/fillna(dict), unpivot/melt, repartition(n,*cols), head(n), column 
> attribute access, stat; SparkSession conf/read/catalog-property; 
> GroupedData.pivot; Row(**kwargs); createDataFrame with DDL/StructType/Row.
> h2. 4. Core bug fixes + complete Arrow type mapping
> functions coalesce/array/concat were nullary with empty column lists -> made 
> variadic. The Sort plan dropped bare (non-SortOrder) columns -> default 
> ascending. Unified the Arrow decoders and completed the mapping 
> (Decimal128/256, FixedSizeBinary, all int/uint widths, all timestamp units 
> incl. TimestampNTZ, Time32/64, intervals, list/struct/map). All fixes in the 
> Rust core, exposed in the Python drop-in.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to