asddfl created SPARK-60643:
------------------------------

             Summary: pandas-on-Spark drop_duplicates cannot resolve a column 
name containing a dot
                 Key: SPARK-60643
                 URL: https://issues.apache.org/jira/browse/SPARK-60643
             Project: Spark
          Issue Type: Bug
          Components: Pandas API on Spark, PySpark
    Affects Versions: 4.2.0
         Environment: Platform: Ubuntu 24.04 Linux-6.17.0-29-generic x86_64
Python: 3.11.17
pyspark 4.2.0
findspark 2.0.1
pandas 3.0.6
numpy 2.4.6
            Reporter: asddfl


Renaming a column from c0 to the literal name t0.c0 and calling drop_duplicates 
raises an unresolved-column error in the pandas API on Spark. Pandas returns 
the one-row DataFrame successfully.

The error treats the dot as a qualifier separator instead of preserving the 
complete column name.

{code:python}
import pandas as pd
from pyspark.sql import SparkSession
import pyspark.pandas as ps

t0 = pd.DataFrame({'c0': [1]})

print("Pandas:", flush=True)
result = t0.rename(columns={'c0': 't0.c0'}).drop_duplicates()
print(result, flush=True)

spark = (
    SparkSession.builder
    .master("local[2]")
    .config("spark.sql.ansi.enabled", "false")
    .config("spark.sql.shuffle.partitions", "2")
    .getOrCreate()
)

t0 = ps.DataFrame({'c0': [1]})

print("PySpark Pandas:", flush=True)
result = t0.rename(columns={'c0': 't0.c0'}).drop_duplicates()
print(result, flush=True)

spark.stop()
{code}

{code:bash}
Pandas:
   t0.c0
0      1
PySpark Pandas:
Traceback (most recent call last):
  File "/test.py", line 24, in <module>
    result = t0.rename(columns={'c0': 't0.c0'}).drop_duplicates()
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/conda/envs/lib/python3.11/site-packages/pyspark/pandas/frame.py", 
line 10311, in drop_duplicates
    sdf, column = self._mark_duplicates(subset, keep)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/conda/envs/lib/python3.11/site-packages/pyspark/pandas/frame.py", 
line 5155, in _mark_duplicates
    sdf = sdf.withColumn(column, F.row_number().over(window) > 1)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File 
"/opt/conda/envs/lib/python3.11/site-packages/pyspark/sql/classic/dataframe.py",
 line 1801, in withColumn
    return DataFrame(self._jdf.withColumn(colName, col._jc), self.sparkSession)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/conda/envs/lib/python3.11/site-packages/py4j/java_gateway.py", 
line 1362, in __call__
    return_value = get_return_value(
                   ^^^^^^^^^^^^^^^^^
  File 
"/opt/conda/envs/lib/python3.11/site-packages/pyspark/errors/exceptions/captured.py",
 line 257, in deco
    raise converted from None
pyspark.errors.exceptions.captured.AnalysisException: 
[UNRESOLVED_COLUMN.WITH_SUGGESTION] A column, variable, or function parameter 
with name `t0`.`c0` cannot be resolved. Did you mean one of the following? 
[`t0.c0`, `__index_level_0__`, `__natural_order__`]. SQLSTATE: 42703;
'Project [__index_level_0__#0L, t0.c0#3L, __natural_order__#2L, 
'`>`(row_number() windowspecdefinition('t0.c0, __natural_order__#2L ASC NULLS 
FIRST, specifiedwindowframe(RowFrame, unboundedpreceding$(), currentrow$())), 
1) AS __duplicated__#4]
+- Project [__index_level_0__#0L, c0#1L AS t0.c0#3L, __natural_order__#2L]
   +- Project [__index_level_0__#0L, c0#1L, monotonically_increasing_id() AS 
__natural_order__#2L]
      +- LocalRelation [__index_level_0__#0L, c0#1L]
{code}

*Expected behavior*

Return one row with value 1 under the literal column name t0.c0, matching 
Pandas.

*Actual behavior*

The call raises AnalysisException with condition 
UNRESOLVED_COLUMN.WITH_SUGGESTION and SQLSTATE 42703. Spark attempts to resolve 
`t0`.`c0`, while its suggestions include the existing literal column `t0.c0`.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

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

Reply via email to