package water.rapids.transforms;
import water.DKV;
import water.H2O;
import water.Key;
import water.fvec.Frame;
import water.rapids.*;
import water.rapids.ast.AstParameter;
import water.rapids.ast.AstRoot;
import water.rapids.ast.params.AstId;
import water.rapids.ast.params.AstStr;
import water.rapids.ast.params.AstStrList;
public class H2OColSelect extends Transform<H2OColSelect> {
private final String[] _cols;
// not a public constructor -- used by the REST api only; must be public for stupid java.lang.reflect
public H2OColSelect(String name, String ast, boolean inplace, String[] newNames) {
super(name,ast,inplace,newNames);
AstParameter cols = ((AstParameter)_ast._asts[2]);
if( cols instanceof AstStrList) _cols = ((AstStrList)cols)._strs;
else if (cols instanceof AstStr) _cols = new String[]{((AstStr)cols).getStr()};
else _cols = null;
}
@Override public Transform<H2OColSelect> fit(Frame f) { return this; }
@Override protected Frame transformImpl(Frame f) {
_ast._asts[1] = new AstId(f);
// throw water.H2O.unimpl();
Session ses = new Session();
Frame fr = ses.exec(_ast,null).getFrame();
if( fr._key==null ) fr = new Frame(Key.<Frame>make("H2OColSelect_"+f._key.toString()),fr.names(),fr.vecs());
DKV.put(fr);
return fr;
}
@Override Frame inverseTransform(Frame f) { throw H2O.unimpl(); }
public String genClassImpl() {
StringBuilder sb = new StringBuilder();
sb.append(" @Override public RowData transform(RowData row) {\n");
sb.append(" RowData colSelect = new RowData();\n");
for( String s: _cols)
sb.append(" colSelect.put(\""+s+"\", row.get(\""+s+"\"));\n");
sb.append(" return colSelect;\n").append(" }\n");
return sb.toString();
}
}