{"record":{"id":"6273b76ffd20bbde","repo":"prestodb/presto","slug":"learn-must-run-on-a-single-machine-6273b7","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/LearnLibSvmClassifierAggregation.java","lineNumber":65,"sourceCode":"\n    @InputFunction\n    public static void input(\n            @AggregationState LearnState state,\n            @SqlType(DOUBLE) double label,\n            @SqlType(\"map(bigint,double)\") Block features,\n            @SqlType(VARCHAR) Slice parameters)\n    {\n        state.getLabels().add(label);\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<bigint>\")\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 ClassifierFeatureTransformer(new SvmClassifier(LibSvmUtils.parseParameters(state.getParameters().toStringUtf8())), new FeatureUnitNormalizer());\n        model.train(dataset);\n        ClassifierType.BIGINT_CLASSIFIER.writeSlice(out, ModelUtils.serialize(model));\n    }\n}\n","sourceCodeStart":47,"sourceCodeEnd":77,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-ml/src/main/java/com/facebook/presto/ml/LearnLibSvmClassifierAggregation.java#L47-L77","documentation":"Unsupported-operation guard in the ML LEARN classifier aggregation: these aggregations are declared non-decomposable, so the engine must never call combine() to merge partial states across machines. Seeing this error means distributed aggregation was attempted — an engine/usage invariant violation for learn_classifier.","triggerScenarios":"Thrown at presto-ml/src/main/java/com/facebook/presto/ml/LearnLibSvmClassifierAggregation.java:65 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Run the LEARN aggregation on a single machine / single-partition input","Ensure the aggregation is not planned with distributed partial aggregation","Pre-aggregate training data so a single worker processes it"],"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"}