{"record":{"id":"79a8faabc249b34d","repo":"apache/beam","slug":"unable-to-run-pipeline-with-requirement-s-runner","errorCode":null,"errorMessage":"Unable to run pipeline with requirement: %s","messagePattern":"Unable to run pipeline with requirement: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/runners/runner.py","lineNumber":213,"sourceCode":"    return transform.expand(input)\n\n  def is_fnapi_compatible(self):\n    \"\"\"Whether to enable the beam_fn_api experiment by default.\"\"\"\n    return True\n\n  def check_requirements(\n      self,\n      pipeline_proto: beam_runner_api_pb2.Pipeline,\n      supported_requirements: Iterable[str]):\n    \"\"\"Check that this runner can satisfy all pipeline requirements.\"\"\"\n\n    # Imported here to avoid circular dependencies.\n    # pylint: disable=wrong-import-order, wrong-import-position\n    from apache_beam.runners.portability.fn_api_runner import translations\n    supported_requirements = set(supported_requirements)\n    for requirement in pipeline_proto.requirements:\n      if requirement not in supported_requirements:\n        raise ValueError(\n            'Unable to run pipeline with requirement: %s' % requirement)\n    for transform in pipeline_proto.components.transforms.values():\n      if transform.spec.urn == common_urns.primitives.TEST_STREAM.urn:\n        if common_urns.primitives.TEST_STREAM.urn not in supported_requirements:\n          raise NotImplementedError(transform.spec.urn)\n      elif transform.spec.urn in translations.PAR_DO_URNS:\n        payload = beam_runner_api_pb2.ParDoPayload.FromString(\n            transform.spec.payload)\n        for timer in payload.timer_family_specs.values():\n          if timer.time_domain not in (\n              beam_runner_api_pb2.TimeDomain.EVENT_TIME,\n              beam_runner_api_pb2.TimeDomain.PROCESSING_TIME):\n            raise NotImplementedError(timer.time_domain)\n\n  def default_pickle_library_override(self):\n    \"\"\"Default pickle library, can be overridden by runner implementation.\"\"\"\n    return None\n","sourceCodeStart":195,"sourceCodeEnd":231,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/runners/runner.py#L195-L231","documentation":"PipelineRunner.check_requirements() validates that every requirement URN in the pipeline proto is supported by the runner's supported_requirements set. If a pipeline declares a requirement (e.g. from a side input, stateful DoFn, or test stream) the target runner cannot handle, this ValueError is raised before execution.","triggerScenarios":"Calling run_portable_pipeline (via check_requirements) with a pipeline proto whose pipeline_proto.requirements contains a URN not present in supported_requirements.","commonSituations":"Switching to a runner that lacks support for a feature the pipeline uses (e.g. runners that don't implement a specific requirement); building pipelines with state/timers/splittable DoFns and running them on a runner without those capabilities.","solutions":["Remove the pipeline feature that adds the unsupported requirement","Use a runner that supports the requirement (check supported_requirements for your runner)","Upgrade apache_beam / the runner, as newer versions implement more requirements"],"exampleFix":"// before\n# pipeline uses stateful DoFn on a runner without STATEFUL_PROCESSING support\nresult = pipeline.run()\n// after\n# switch to a runner supporting the requirement, or refactor the DoFn to be stateless\npipeline = beam.Pipeline(runner='DirectRunner')","handlingStrategy":"try-catch","validationCode":"unsupported = set(pipeline_proto.requirements) - set(runner.supported_requirements)\nif unsupported:\n    print('runner lacks:', unsupported)","typeGuard":null,"tryCatchPattern":"try:\n    runner.check_requirements(pipeline_proto, runner.supported_requirements)\nexcept ValueError as e:\n    # inspect e for the unsupported requirement URN, pick another runner\n    raise","preventionTips":["Check the runner's supported requirements before porting pipelines","Keep apache_beam and runner dependencies up to date","Avoid features (state, timers, SDF) not supported by your target runner"],"tags":["apache-beam","portability","unsupported-feature","pipeline"],"backgroundTag":"unsupported-operation","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"}