HyukjinKwon commented on PR #54:
URL: 
https://github.com/apache/spark-connect-rust/pull/54#issuecomment-5418883835

   Thanks — all 10 findings addressed. Two commits: parity-gate correctness, 
then the functional/fidelity fixes.
   
   **Must-fix**
   - **#1 TIMESTAMP `createDataFrame` regression** — `build_arrow_array` now 
takes the target field type and tags the timestamp array's zone to match the 
schema (UTC for TIMESTAMP/LTZ, none for TIMESTAMP_NTZ), so 
`RecordBatch::try_new` no longer rejects it. Covered by a new 
`e2e_coverage::create_dataframe_typed_schemas` (TIMESTAMP + TIMESTAMP_NTZ + 
Float-from-int).
   - **#2 gate scores `ok` with no summary line** — `run_ours` now gates on 
pytest's **exit code** (0 ok, 5 = fully-deselected/no-tests ok, anything else 
fail) via a shared `is_bad()` used by the retry loop, the failure decision, and 
the drift check. A plugin-load/collection/crash exit is no longer mistaken for 
green.
   - **#3 plural `"errors"`** — regex is now `errors?` (and the returncode 
check covers it regardless).
   
   **Fidelity**
   - **#4** `approxQuantile` returns `list[float]` (collects the server's 
array-of-arrays, returns the inner list).
   - **#5** `persist(level)` honors the requested `StorageLevel` (default → 
`MEMORY_AND_DISK_DESER`).
   - **#6** `repartition("col")` / `repartition(col)` column-first form works 
(`num_partitions <= 0` serializes as unset → server default).
   - **#7** new `coerce_option_value` across all reader/writer/streaming/conf 
`option(s)`/`set`: `None` leaves the option unset, booleans lowercase to 
`"true"`/`"false"`.
   - **#8** `hint(name, 3)` accepts int params and sends an `Integer` (int32) 
literal (a `Long` was rejected by REBALANCE).
   - **#10** `coerce_value` widens `Long`/`Integer` → `Float` for a FLOAT 
`createDataFrame` column.
   
   **#9** (`__getattr__` returns a Column for any name) left as the noted 
deliberate trade-off (validating would need a schema round-trip per attribute 
access).
   
   On the coverage note: agreed — the parity suite + Rust golden/behavioral 
tests are the real gate, and `e2e_wrapper`'s `ckv` assertions are a local 
coverage vehicle. Separately, I've been replacing proto-snapshot coverage tests 
with **behavioral** e2e that assert results against reference semantics (both 
Rust and the Python drop-in) — which is how #1/#4-#8 above and several earlier 
bugs (`select_expr`, `to_json`, `String.simpleString`) were caught.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to