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

Yicong Huang updated SPARK-55724:
---------------------------------
    Description: 
SPARK-55384 and SPARK-55388 is refactoring the serializer and Python UDFs eval 
types. To guard against performance regressions, we need microbenchmarks 
covering the Python-side serialization round-trip  (dump_stream / load_stream) 
for each eval type — no JVM required.

  Plan

  New file: python/benchmarks/bench_eval_type.py

  29 eval types, one ASV benchmark class each:

┌─────┬────────────────────────────────────────────────────┬───────┐
  │  #  │                     Eval Type                      │ Value │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 1   │ NON_UDF                                            │ 0     │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 2   │ SQL_BATCHED_UDF                                    │ 100   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 3   │ SQL_ARROW_BATCHED_UDF                              │ 101   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 4   │ SQL_SCALAR_PANDAS_UDF                              │ 200   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 5   │ SQL_GROUPED_MAP_PANDAS_UDF                         │ 201   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 6   │ SQL_GROUPED_AGG_PANDAS_UDF                         │ 202   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 7   │ SQL_WINDOW_AGG_PANDAS_UDF                          │ 203   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 8   │ SQL_SCALAR_PANDAS_ITER_UDF                         │ 204   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 9   │ SQL_MAP_PANDAS_ITER_UDF                            │ 205   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 10  │ SQL_COGROUPED_MAP_PANDAS_UDF                       │ 206   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 11  │ SQL_MAP_ARROW_ITER_UDF                             │ 207   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 12  │ SQL_GROUPED_MAP_PANDAS_UDF_WITH_STATE              │ 208   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 13  │ SQL_GROUPED_MAP_ARROW_UDF                          │ 209   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 14  │ SQL_COGROUPED_MAP_ARROW_UDF                        │ 210   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 15  │ SQL_TRANSFORM_WITH_STATE_PANDAS_UDF                │ 211   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 16  │ SQL_TRANSFORM_WITH_STATE_PANDAS_INIT_STATE_UDF     │ 212   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 17  │ SQL_TRANSFORM_WITH_STATE_PYTHON_ROW_UDF            │ 213   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 18  │ SQL_TRANSFORM_WITH_STATE_PYTHON_ROW_INIT_STATE_UDF │ 214   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 19  │ SQL_GROUPED_MAP_ARROW_ITER_UDF                     │ 215   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 20  │ SQL_GROUPED_MAP_PANDAS_ITER_UDF                    │ 216   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 21  │ SQL_GROUPED_AGG_PANDAS_ITER_UDF                    │ 217   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 22  │ SQL_SCALAR_ARROW_UDF                               │ 250   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 23  │ SQL_SCALAR_ARROW_ITER_UDF                          │ 251   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 24  │ SQL_GROUPED_AGG_ARROW_UDF                          │ 252   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 25  │ SQL_WINDOW_AGG_ARROW_UDF                           │ 253   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 26  │ SQL_GROUPED_AGG_ARROW_ITER_UDF                     │ 254   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 27  │ SQL_TABLE_UDF                                      │ 300   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 28  │ SQL_ARROW_TABLE_UDF                                │ 301   │
  ├─────┼────────────────────────────────────────────────────┼───────┤
  │ 29  │ SQL_ARROW_UDTF                                     │ 302   │
  └─────┴────────────────────────────────────────────────────┴───────┘


  Stream protocol simulation (pure Python, no JVM):
  - Plain: raw Arrow IPC
  - Grouped: write_int(1) + Arrow IPC + write_int(0)
  - Cogroup: write_int(2) + 2x Arrow IPC + write_int(0)

> Micro-benchmark PySpark Eval Types
> ----------------------------------
>
>                 Key: SPARK-55724
>                 URL: https://issues.apache.org/jira/browse/SPARK-55724
>             Project: Spark
>          Issue Type: Umbrella
>          Components: PySpark
>    Affects Versions: 4.2.0
>            Reporter: Yicong Huang
>            Priority: Major
>
> SPARK-55384 and SPARK-55388 is refactoring the serializer and Python UDFs 
> eval types. To guard against performance regressions, we need microbenchmarks 
> covering the Python-side serialization round-trip  (dump_stream / 
> load_stream) for each eval type — no JVM required.
>   Plan
>   New file: python/benchmarks/bench_eval_type.py
>   29 eval types, one ASV benchmark class each:
> ┌─────┬────────────────────────────────────────────────────┬───────┐
>   │  #  │                     Eval Type                      │ Value │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 1   │ NON_UDF                                            │ 0     │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 2   │ SQL_BATCHED_UDF                                    │ 100   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 3   │ SQL_ARROW_BATCHED_UDF                              │ 101   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 4   │ SQL_SCALAR_PANDAS_UDF                              │ 200   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 5   │ SQL_GROUPED_MAP_PANDAS_UDF                         │ 201   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 6   │ SQL_GROUPED_AGG_PANDAS_UDF                         │ 202   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 7   │ SQL_WINDOW_AGG_PANDAS_UDF                          │ 203   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 8   │ SQL_SCALAR_PANDAS_ITER_UDF                         │ 204   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 9   │ SQL_MAP_PANDAS_ITER_UDF                            │ 205   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 10  │ SQL_COGROUPED_MAP_PANDAS_UDF                       │ 206   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 11  │ SQL_MAP_ARROW_ITER_UDF                             │ 207   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 12  │ SQL_GROUPED_MAP_PANDAS_UDF_WITH_STATE              │ 208   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 13  │ SQL_GROUPED_MAP_ARROW_UDF                          │ 209   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 14  │ SQL_COGROUPED_MAP_ARROW_UDF                        │ 210   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 15  │ SQL_TRANSFORM_WITH_STATE_PANDAS_UDF                │ 211   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 16  │ SQL_TRANSFORM_WITH_STATE_PANDAS_INIT_STATE_UDF     │ 212   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 17  │ SQL_TRANSFORM_WITH_STATE_PYTHON_ROW_UDF            │ 213   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 18  │ SQL_TRANSFORM_WITH_STATE_PYTHON_ROW_INIT_STATE_UDF │ 214   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 19  │ SQL_GROUPED_MAP_ARROW_ITER_UDF                     │ 215   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 20  │ SQL_GROUPED_MAP_PANDAS_ITER_UDF                    │ 216   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 21  │ SQL_GROUPED_AGG_PANDAS_ITER_UDF                    │ 217   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 22  │ SQL_SCALAR_ARROW_UDF                               │ 250   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 23  │ SQL_SCALAR_ARROW_ITER_UDF                          │ 251   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 24  │ SQL_GROUPED_AGG_ARROW_UDF                          │ 252   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 25  │ SQL_WINDOW_AGG_ARROW_UDF                           │ 253   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 26  │ SQL_GROUPED_AGG_ARROW_ITER_UDF                     │ 254   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 27  │ SQL_TABLE_UDF                                      │ 300   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 28  │ SQL_ARROW_TABLE_UDF                                │ 301   │
>   ├─────┼────────────────────────────────────────────────────┼───────┤
>   │ 29  │ SQL_ARROW_UDTF                                     │ 302   │
>   └─────┴────────────────────────────────────────────────────┴───────┘
>   Stream protocol simulation (pure Python, no JVM):
>   - Plain: raw Arrow IPC
>   - Grouped: write_int(1) + Arrow IPC + write_int(0)
>   - Cogroup: write_int(2) + 2x Arrow IPC + write_int(0)



--
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