apache/beam · error · WontImplementError

'{name}' is not yet supported {reason_data['explanation']}

Error message

'{name}' is not yet supported {reason_data['explanation']}

What it means

The @frame_base.with_keyboard (not_yet_implemented) decorator replaces a pandas method with a stub that always raises WontImplementError. This marks operations the Beam DataFrame API has decided it cannot or will not support (e.g. in-place mutation, update, or operations fundamentally incompatible with deferred/distributed execution).

Source

Thrown at sdks/python/apache_beam/dataframe/frame_base.py:400

           ``_WONT_IMPLEMENT_REASONS`` to generate a helpful exception message
           and docstring for the method.
      explanation: If specified, use this string as an explanation for why
           this operation is not supported when generating an exception message
           and docstring.
  """
  if reason is not None:
    if reason not in _WONT_IMPLEMENT_REASONS:
      raise AssertionError(
          f"reason must be one of {list(_WONT_IMPLEMENT_REASONS.keys())}, "
          f"got {reason!r}")
    reason_data = _WONT_IMPLEMENT_REASONS[reason]
  elif explanation is not None:
    reason_data = {'explanation': explanation}
  else:
    raise ValueError("One of (reason, explanation) must be specified")

  def wrapper(*args, **kwargs):
    raise WontImplementError(
        f"'{name}' is not yet supported {reason_data['explanation']}",
        reason=reason)

  wrapper.__name__ = name
  wrapper.__doc__ = (
      f":meth:`{_prettify_pandas_type(base_type)}.{name}` is not yet supported "
      f"in the Beam DataFrame API {reason_data['explanation']}")

  if 'url' in reason_data:
    wrapper.__doc__ += f"\n\n For more information see {reason_data['url']}."

  return wrapper


def not_implemented_method(op, issue='20318', base_type=None):
  """Generate a stub method for ``op`` that simply raises a NotImplementedError.

  For internal use only. No backwards compatibility guarantees."""

View on GitHub (pinned to 12126d8942)

Solutions

  1. Replace the unsupported call with a supported functional equivalent (e.g. use .where/.combine_first instead of update).
  2. Materialize the data (to_pcollection/to a concrete pandas DataFrame) and perform the operation with real pandas.
  3. Drop the operation and restructure the pipeline; consult the Beam DataFrame API roadmap for the method.

Example fix

// before
df.update(other)
// after
df = df.combine_first(other)
# or materialize:
pdf = convert.to_pandas(df)
pdf.update(other)
Defensive patterns

Strategy: try-catch

Validate before calling

UNSUPPORTED = {'update', 'insert', 'to_csv'}
if method_name in UNSUPPORTED:
    plan_alternative(method_name)

Try / catch

from apache_beam.dataframe.frame_base import WontImplementError
try:
    df.update(other)
except WontImplementError:
    df = df.combine_first(other)

Prevention

When it happens

Trigger: Calling any pandas method that is decorated as not-yet-implemented with an explicit reason, e.g. df.update(...), df.to_csv on a deferred frame, df.insert, in-place operations (inplace=True paths).

Common situations: Direct ports of pandas scripts that mutate dataframes in place; operations requiring side effects or eager evaluation; discovering unsupported methods while migrating large pandas codebases.

Related errors


AI-assisted analysis of apache/beam@12126d8942 (2026-09-13). Data as JSON: /api/errors/e00261444873bb72. Report an issue: GitHub.