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

Wenchen Fan resolved SPARK-59909.
---------------------------------
    Fix Version/s: 4.4.0
       Resolution: Fixed

Issue resolved by pull request 59170
[https://github.com/apache/spark/pull/59170]

> PySpark raises internal errors instead of intended messages due to undefined 
> error conditions and mismatched message parameters
> -------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: SPARK-59909
>                 URL: https://issues.apache.org/jira/browse/SPARK-59909
>             Project: Spark
>          Issue Type: Bug
>          Components: PySpark
>    Affects Versions: 4.1.0, 4.0.0, 4.2.0
>            Reporter: Jubin Soni
>            Assignee: Jubin Soni
>            Priority: Minor
>              Labels: pull-request-available
>             Fix For: 4.4.0
>
>
> Several PySpark call sites raise a PySparkException with an error condition 
> that does not exist in python/pyspark/errors/error-conditions.json, or with 
> messageParameters that do not match the condition's template. Constructing 
> the exception itself fails, so the user gets an unrelated internal error 
> instead of the intended message, often with a different exception type (e.g. 
> ValueError instead of TypeError).
> h3. Undefined error conditions (fails with "ValueError: Cannot find main 
> error class ...")
> * NOT_STR - DataStreamReader.changes() (pyspark/sql/streaming/readwriter.py). 
> NOT_STR was consolidated into NOT_EXPECTED_TYPE by SPARK-56179 while this new 
> usage was added concurrently.
> * VARIANT_SIZE_LIMIT_EXCEEDED - pyspark/sql/variant_utils.py (3 places)
> * INVALID_OPERATION_UUID_ID - pyspark/sql/connect/client/core.py
> * UNSUPPORTED_FILTER - pyspark/sql/worker/data_source_pushdown_filters.py
> h3. Mismatched message parameters (fails with "AssertionError: Undefined 
> error message parameter ...")
> * DATA_SOURCE_EXTRANEOUS_FILTERS - 
> pyspark/sql/worker/data_source_pushdown_filters.py passes extra "input" and 
> "extraneous" parameters
> * NO_ACTIVE_SESSION - pyspark/sql/connect/dataframe.py passes an extra 
> "operator" parameter
> h3. Reproduction
> {code:python}
> >>> spark.readStream.changes(123)
> ValueError: Cannot find main error class 'NOT_STR'
> {code}
> Expected: PySparkTypeError saying that `tableName` should be a str.
> The existing test for DATA_SOURCE_EXTRANEOUS_FILTERS 
> (test_python_datasource.py) does not catch this, because it only asserts that 
> the condition name appears in the exception text, which is also true of the 
> AssertionError.
> The JVM side guards against this in SparkThrowableSuite, but PySpark has no 
> equivalent check.
> h3. Proposed fix
> Fix each call site, and add a test that scans PySpark sources for errorClass 
> literals and verifies that each one is defined and that its literal 
> messageParameters keys match the template.
> UNSUPPORTED_PIPELINES_DATASET_TYPE has the same kind of problem but is 
> already tracked in SPARK-57965, so it is out of scope here.



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