{"record":{"id":"a2023d2129580e8b","repo":"prestodb/presto","slug":"learn-must-run-on-a-single-machine-a2023d","errorCode":null,"errorMessage":"LEARN must run on a single machine","messagePattern":"LEARN must run on a single machine","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"presto-ml/src/main/java/com/facebook/presto/ml/LearnLibSvmVarcharClassifierAggregation.java","lineNumber":51,"sourceCode":"\n    @InputFunction\n    public static void input(\n            @AggregationState LearnState state,\n            @SqlType(VARCHAR) Slice label,\n            @SqlType(\"map(bigint,double)\") Block features,\n            @SqlType(VARCHAR) Slice parameters)\n    {\n        state.getLabels().add((double) state.enumerateLabel(label.toStringUtf8()));\n        FeatureVector featureVector = ModelUtils.toFeatures(features);\n        state.addMemoryUsage(featureVector.getEstimatedSize());\n        state.getFeatureVectors().add(featureVector);\n        state.setParameters(parameters);\n    }\n\n    @CombineFunction\n    public static void combine(@AggregationState LearnState state, @AggregationState LearnState otherState)\n    {\n        throw new UnsupportedOperationException(\"LEARN must run on a single machine\");\n    }\n\n    @OutputFunction(\"Classifier<varchar>\")\n    public static void output(@AggregationState LearnState state, BlockBuilder out)\n    {\n        Dataset dataset = new Dataset(state.getLabels(), state.getFeatureVectors(), state.getLabelEnumeration().inverse());\n        Model model = new StringClassifierAdapter(new ClassifierFeatureTransformer(new SvmClassifier(LibSvmUtils.parseParameters(state.getParameters().toStringUtf8())), new FeatureUnitNormalizer()));\n        model.train(dataset);\n        VARCHAR_CLASSIFIER.writeSlice(out, ModelUtils.serialize(model));\n    }\n}\n","sourceCodeStart":33,"sourceCodeEnd":63,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-ml/src/main/java/com/facebook/presto/ml/LearnLibSvmVarcharClassifierAggregation.java#L33-L63","documentation":"Unsupported-operation guard in the varchar-label LEARN classifier aggregation: combine() is not implemented because the aggregation is non-decomposable (partial SVM states are not mergeable). Its invocation means the engine tried to merge states, which this function forbids.","triggerScenarios":"Thrown at presto-ml/src/main/java/com/facebook/presto/ml/LearnLibSvmVarcharClassifierAggregation.java:51 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Keep the learn_classifier(varchar, ...) aggregation on a single machine","Avoid plans that split the aggregation across workers","Batch training data before invoking the function"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}