[Bug]: DeferredSeries.duplicated() raises WontImplementError due to incorrect column indexing

Abierto Apto para principiantes
#40,814 1 comentario 0 reacciones 1 asignado Ver en GitHub

Los mantenedores suelen responder en 1 día

@derrickaw ya está trabajando en esto.

Desde el 27/10/2026.

  • #40846 de @derrickaw — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
78/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
pandas, python
Área
backend, data

Línea de trabajo

Lee sdks/python/apache_beam/dataframe/frames.py alrededor de la implementación de DeferredSeries.duplicated() y la reproducción del issue. Comprueba cómo se representa el resultado de DataFrame duplicated() y cómo se gestionan los nombres de Series. Se considera terminado cuando DeferredSeries.duplicated() devuelve una máscara de duplicados diferida sin generar WontImplementError, conserva el nombre de Series cuando existe y el caso reportado tiene cobertura.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug P2 python

What happened?

Description

Calling duplicated() on any DeferredSeries in the Beam DataFrame API (e.g., s.duplicated(keep=False) or s.duplicated(keep="any")) fails and raises a WontImplementError.

Root Cause

In [apache_beam/dataframe/frames.py:1980-1991](https://github.com/apache/beam/blob/master/sdks/python/apache_beam/dataframe/frames.py#L1980-L1991):

@frame_base.with_docs_from(pd.Series)
@frame_base.args_to_kwargs(pd.Series)
@frame_base.populate_defaults(pd.Series)
@frame_base.maybe_inplace
def duplicated(self, keep):
    # Re-use the DataFrame based duplicated, extract the series back out
    df = self._wrap_in_df()

    return df.duplicated(keep=keep)[df.columns[0]]

The implementation attempts to extract a Series from the deferred DataFrame result using string-based column indexing. However, indexing a Series with a string key is unsupported when it produces a non-deferred result, causing the WontImplementError.

Steps to Reproduce
import apache_beam as beam
import pandas as pd
from apache_beam.dataframe.convert import to_dataframe

with beam.Pipeline() as p:
    pcoll = p | beam.Create([
        {'a': 1},
        {'a': 2},
        {'a': 1},
    ])

    df = to_dataframe(pcoll)

    # Crashes with WontImplementError
    result = df['a'].duplicated(keep=False)
Traceback
apache_beam.dataframe.frame_base.WontImplementError:
Indexing a series with key of type <class 'str'> is not supported
because it produces a non-deferred result.

For more information see:
https://s.apache.org/dataframe-non-deferred-result
Proposed Fix

Replace the existing implementation with the following:

-    # Re-use the DataFrame based duplicated, extract the series back out
+    # Re-use the DataFrame based duplicated
     df = self._wrap_in_df()
-
-    return df.duplicated(keep=keep)[df.columns[0]]
+    result = df.duplicated(keep=keep)
+    if self.name is not None:
+        return result.rename(self.name)
+    return result

This avoids unsupported string-based indexing and returns the deferred duplicate mask directly, preserving the original Series name when available.

Issue Priority

Priority: P2 (default; most bugs should be filed as P2).

Issue Components
  • Component: Python SDK
  • Component: Java SDK
  • Component: Go SDK
  • Component: TypeScript SDK
  • Component: IO connector
  • Component: Beam YAML
  • Component: Beam examples
  • Component: Beam playground
  • Component: Beam katas
  • Component: Website
  • Component: Infrastructure
  • Component: Spark Runner
  • Component: Flink Runner
  • Component: Prism Runner
  • Component: Twister2 Runner
  • Component: Hazelcast Jet Runner
  • Component: Google Cloud Dataflow Runner
Lenguaje dominante
Java
Estrellas
8.7k
Forks
4.8k
Merge medio
2 d 2 h
PR fusionados (30 d)
295

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/beam

Todos los issues de apache/beam

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.