com.cloudera.oryx.example.serving.ExampleServingModelManager Maven / Gradle / Ivy
/*
* Copyright (c) 2014, Cloudera, Inc. All Rights Reserved.
*
* Cloudera, Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"). You may not use this file except in
* compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* This software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, either express or implied. See the License for
* the specific language governing permissions and limitations under the
* License.
*/
package com.cloudera.oryx.example.serving;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.typesafe.config.Config;
import org.apache.hadoop.conf.Configuration;
import com.cloudera.oryx.api.serving.AbstractServingModelManager;
import com.cloudera.oryx.api.serving.ServingModel;
/**
* Reads models and updates produced by the Batch Layer and Speed Layer. Models are maps, encoded as JSON
* strings, mapping words to count of distinct other words that appear with that word in an input line.
* Updates are "word,count" pairs representing new counts for a word. This class manages and exposes the
* mapping to the Serving Layer applications.
*/
public final class ExampleServingModelManager extends AbstractServingModelManager {
private final Map distinctOtherWords = new HashMap<>();
public ExampleServingModelManager(Config config) {
super(config);
}
@Override
public void consumeKeyMessage(String key, String message, Configuration hadoopConf) throws IOException {
switch (key) {
case "MODEL":
@SuppressWarnings("unchecked")
Map model = (Map) new ObjectMapper().readValue(message, Map.class);
synchronized (distinctOtherWords) {
distinctOtherWords.clear();
model.forEach(distinctOtherWords::put);
}
break;
case "UP":
String[] wordCount = message.split(",");
synchronized (distinctOtherWords) {
distinctOtherWords.put(wordCount[0], Integer.valueOf(wordCount[1]));
}
break;
default:
throw new IllegalArgumentException("Bad key " + key);
}
}
@Override
public ServingModel getModel() {
return new ExampleServingModel(distinctOtherWords);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy