{"record":{"id":"aea1768fb0610585","repo":"apache/beam","slug":"execution-of-s-not-implemented-in-runner-s","errorCode":null,"errorMessage":"Execution of [%s] not implemented in runner %s.","messagePattern":"Execution of \\[(.+?)\\] not implemented in runner (.+?)\\.","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/runners/direct/transform_evaluator.py","lineNumber":129,"sourceCode":"        core.PTransform: DefaultRootBundleProvider,\n        _TestStream: _TestStreamRootBundleProvider,\n    }\n\n  def get_evaluator(\n      self, applied_ptransform, input_committed_bundle, side_inputs):\n    \"\"\"Returns a TransformEvaluator suitable for processing given inputs.\"\"\"\n    assert applied_ptransform\n    assert bool(applied_ptransform.side_inputs) == bool(side_inputs)\n\n    # Walk up the class hierarchy to find an evaluable type. This is necessary\n    # for supporting sub-classes of core transforms.\n    for cls in applied_ptransform.transform.__class__.mro():\n      evaluator = self._evaluators.get(cls)\n      if evaluator:\n        break\n\n    if not evaluator:\n      raise NotImplementedError(\n          'Execution of [%s] not implemented in runner %s.' %\n          (type(applied_ptransform.transform), self))\n    return evaluator(\n        self._evaluation_context,\n        applied_ptransform,\n        input_committed_bundle,\n        side_inputs)\n\n  def get_root_bundle_provider(self, applied_ptransform):\n    provider_cls = None\n    for cls in applied_ptransform.transform.__class__.mro():\n      provider_cls = self._root_bundle_providers.get(cls)\n      if provider_cls:\n        break\n    if not provider_cls:\n      raise NotImplementedError(\n          'Root provider for [%s] not implemented in runner %s' %\n          (type(applied_ptransform.transform), self))","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/runners/direct/transform_evaluator.py#L111-L147","documentation":"The DirectRunner's TransformEvaluatorRegistry walks the transform's MRO looking for a registered evaluator class. If none is found, get_evaluator raises NotImplementedError, meaning the DirectRunner has no local implementation for this PTransform type.","triggerScenarios":"Applying a PTransform subclass (custom transform, external transform, or cloud-only primitive like a native Pub/Sub/BigQuery sink variant) to a pipeline executed with DirectRunner, where the transform class and all its bases are absent from _evaluators.","commonSituations":"Custom PTransform not registered with the DirectRunner; using cross-language/external transforms; transforms meant only for distributed runners; stale Beam version where a new primitive has no local evaluator.","solutions":["Replace the transform with a composable one built from supported primitives (ParDo, GroupByKey, etc.).","Register a _TransformEvaluator for your transform class with the registry (subclass and extend _evaluators).","Run the pipeline on a runner that supports the transform.","Upgrade apache-beam — a newer DirectRunner may have added the evaluator."],"exampleFix":"# before\noutput = pcoll | MyCustomPrimitive()\n# after\noutput = pcoll | beam.ParDo(MyDoFn())  # composed of supported primitives","handlingStrategy":"fallback","validationCode":"from apache_beam.runners.direct.transform_evaluator import _TransformEvaluatorRegistry\n# assert your transform class (or an ancestor) has an evaluator before submitting","typeGuard":"def is_direct_runner_supported(t) -> bool:\n    from apache_beam.runners.direct import transform_evaluator as te\n    return any(cls in te._TransformEvaluatorRegistry._evaluators for cls in type(t).__mro__)","tryCatchPattern":"try:\n    result = pipeline.run()\nexcept NotImplementedError as e:\n    if 'not implemented in runner' in str(e):\n        rewrite_transform_with_supported_primitives()","preventionTips":["Compose transforms only from documented DirectRunner-supported primitives.","Test pipelines with DirectRunner locally before shipping to any runner.","Avoid unregistered custom PTransform primitives."],"tags":["python","apache-beam","directrunner","ptransform"],"backgroundTag":"method-not-implemented","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}