我正在用java编写一个定制的udf,并在azuredatabricks中运行它。在其他方面似乎一切正常,但我很难读取当前用户(例如运行笔记本的用户)。我两个都试过了 SessionState.get().getUserName()
以及 SessionState.getUserFromAuthenticator()
,但运气不好。
我的代码类似于:
public class TestUDF extends GenericUDF {
private GenericUDFUtils.ReturnObjectInspectorResolver roir;
private ObjectInspector[] arguments;
@Override
public ObjectInspector initialize(ObjectInspector[] objectInspectors) throws UDFArgumentException {
arguments = objectInspectors;
// not working: String username = SessionState.getUserFromAuthenticator();
// not working: String username = SessionState.get().getUserName();
roir = new GenericUDFUtils.ReturnObjectInspectorResolver(true);
roir.update(objectInspectors[0]);
return (roir.get());
}
@Override
public Object evaluate(DeferredObject[] deferredObjects) throws HiveException {
Text text = (Text) roir.convertIfNecessary(deferredObjects[0].get(), arguments[0]);
return (text);
}
@Override
public String getDisplayString(String[] strings) {
return (getStandardDisplayString(getFuncName(), strings));
}
@Override
protected String getFuncName() {
return ("test");
}
}
你知道我遗漏了什么吗,比如某种初始化?
编辑:
具有自定义项的库:
hadoop:2.6.0版
Hive:2.0.0
数据框:
运行时:6.6(也尝试了5.5)
暂无答案!
目前还没有任何答案,快来回答吧!