{"record":{"id":"eb0eeed6a944b83a","repo":"apache/beam","slug":"unknown-language-for-mapping-transform-language-supported","errorCode":null,"errorMessage":"Unknown language for mapping transform: {language}. Supported languages are \"javascript\" and \"python.\"","messagePattern":"Unknown language for mapping transform: (.+?)\\. Supported languages are \"javascript\" and \"python\\.\"","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"sdks/python/apache_beam/yaml/yaml_mapping.py","lineNumber":413,"sourceCode":"  # Extract original type from upstream pcoll when doing simple mappings\n  original_type = input_schema.get(expr.get('expression'), None)\n  if expr in original_fields:\n    language = \"python\"\n\n  # TODO(yaml): support an imports parameter\n  # TODO(yaml): support a requirements parameter (possibly at a higher level)\n  if not isinstance(expr, dict):\n    raise ValueError(\n        f\"Ambiguous expression type (perhaps missing quoting?): {expr}\")\n  explicit_type = expr.pop('output_type', None)\n  _check_mapping_arguments(transform_name, **expr)\n\n  if language == \"javascript\":\n    func = _expand_javascript_mapping_func(original_fields, **expr)\n  elif language in (\"python\", \"generic\", None):\n    func = _expand_python_mapping_func(original_fields, **expr)\n  else:\n    raise ValueError(\n        f'Unknown language for mapping transform: {language}. '\n        'Supported languages are \"javascript\" and \"python.\"')\n\n  if explicit_type:\n    if isinstance(explicit_type, str):\n      explicit_type = {'type': explicit_type}\n    beam_type = json_utils.json_type_to_beam_type(explicit_type)\n    validator = _validator(beam_type)\n\n    @beam.typehints.with_output_types(schemas.typing_from_runner_api(beam_type))\n    def checking_func(row):\n      result = func(row)\n      if not validator(result):\n        raise TypeError(f'{result} violates schema {explicit_type}')\n      return result\n\n    return checking_func\n","sourceCodeStart":395,"sourceCodeEnd":431,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/python/apache_beam/yaml/yaml_mapping.py#L395-L431","documentation":"`_as_callable` supports only language values 'javascript', 'python', 'generic', or unset (None). Any other `language` value in the transform config reaches this ValueError listing the supported languages.","triggerScenarios":"Setting `language: js`, `language: java`, `language: Python` (case-sensitive — 'Python' with a capital P also fails? no: it compares exact strings, so 'Python' fails), or any typo'd language name in MapToFields/other mapping-transform config.","commonSituations":"Typos ('java' vs 'javascript', 'js' abbreviation), wrong casing ('Python'), or assuming other UDF languages (Go, SQL, Java) are supported in YAML mapping transforms.","solutions":["Set language to exactly 'javascript' or 'python' (or omit it entirely for the default Python behavior).","Fix casing and spelling: 'js' and 'JavaScript' are not accepted.","If you need another language, implement the UDF in Python or JavaScript instead, or extend the transform."],"exampleFix":"# before\nconfig:\n  language: js\n# after\nconfig:\n  language: javascript","handlingStrategy":"validation","validationCode":"assert language in (None, 'python', 'generic', 'javascript'), f'unsupported language {language!r}'","typeGuard":"def is_supported_language(lang) -> bool:\n    return lang in (None, 'python', 'generic', 'javascript')","tryCatchPattern":"try:\n    run_pipeline(yaml_spec)\nexcept ValueError as e:\n    if 'Unknown language for mapping transform' in str(e):\n        yaml_spec['config']['language'] = normalize_language(yaml_spec['config']['language'])\n        run_pipeline(yaml_spec)\n    else:\n        raise","preventionTips":["Use only 'python' or 'javascript', lowercase, no abbreviations","Omit `language` when using Python (the default)","Keep a whitelist in any tooling that generates these configs"],"tags":["yaml","beam-yaml","config","invalid-enum"],"backgroundTag":"invalid-enum-value","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"}