来自azure databricks中自定义udf的当前用户

qq24tv8q  于 2021-05-27  发布在  Hadoop
关注(0)|答案(0)|浏览(332)

我正在用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)

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题