package water.api;
import org.apache.hadoop.fs.Path;
import water.*;
import water.persist.PersistHdfs;
import water.util.Log;
import dontweave.gson.JsonObject;
public class ExportHdfs extends Request {
protected final H2OExistingKey _source = new H2OExistingKey(SOURCE_KEY);
protected final Str _path = new Str(PATH);
public ExportHdfs() {
_requestHelp = "Exports JSON to the given HDFS path. The Web server node "
+ "must have write permission to the HDFS path.";
_path._requestHelp = "HDFS path to export to.";
}
@Override protected Response serve() {
Value value = _source.value();
String path = _path.value();
try {
if( value == null ) throw new IllegalArgumentException("Unknown key: " + _source.record()._originalValue);
byte[] data = null;
Model model = getAsModel(value);
if( model != null ) {
// Add extension, used during import
if( !path.endsWith(Extensions.JSON) ) path += Extensions.JSON;
data = model.writeJSON(new AutoBuffer()).buf();
}
if( data != null ) PersistHdfs.store(new Path(path), data);
else throw new UnsupportedOperationException("Only models can be exported");
} catch( Throwable e ) {
return Response.error(e);
}
JsonObject json = new JsonObject();
Response r = Response.done(json);
return r;
}
private static Model getAsModel(Value v) {
if( v.type() == TypeMap.PRIM_B ) return null;
Iced iced = v.get();
if( iced instanceof Model ) return (Model) iced;
return null;
}
}