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
- Replace the unsupported call with a supported functional equivalent (e.g. use .where/.combine_first instead of update).
- Materialize the data (to_pcollection/to a concrete pandas DataFrame) and perform the operation with real pandas.
- 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
- Run new pipelines on small local data first to surface WontImplementError early.
- Check the Beam DataFrame API roadmap for methods marked not-supported.
- Favor functional/immutable dataframe style (no inplace=True) when targeting Beam.
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
- %s=%s not supported for %s
- {op!r} is not implemented yet. If support for {op!r} is impo
- Unable to convert objects of type %s to a PCollection
- Expression roots must have been created with to_dataframe.
- {reason}\nConsider using an allow_non_parallel_operations bl
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/e00261444873bb72.
Report an issue: GitHub.