hiveudf对url的处理

k7fdbhmy  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(290)

我创建了一个分析url的配置单元udf。url包含查询参数。但是,当我在udf中解析输入时,像“=”和“&”这样的字符被转换成乱码。
起初,我是依靠字符串的 toString() 方法转换配置单元 Text 到java字符串。用这种方法将上述字符转换成乱码。然后我试着用 new String(str, StandardCharsets.UTF_8) 转换Hive Text 到java String . 一开始是这样的。然后,它也开始产生胡言乱语。
我的方法如下所示。有没有关于我做得不对的想法?

public Text evaluate(final Text requestInput, final Text referrerInput) {
    if (requestInput == null || referrerInput == null)
        return null;

    final String request = new String(requestInput.getBytes(), StandardCharsets.UTF_8); // converts '=' and '&' in URL strings to gibberish
    final String referrer = new String(referrerInput.getBytes(), StandardCharsets.UTF_8); // converts '=' and '&' in URL strings to gibberish

}
在配置单元中运行hql时:

SELECT get_json_object(json, '$.base.request_url') FROM events

我明白了: GET /api/get_info?id=1465473313746 HTTP/1.1 在我的自定义项中 toString() 方法(无附加处理)生成以下输出: GET /api/get_info?id\u003d1465473313746 HTTP/1.1

yzxexxkh

yzxexxkh1#

我知道 = 以及 & 正在转换为它们的unicode等价物。我还不清楚为什么会这样。使用apache commons stringescapeutils实用程序,问题变得更简单:

StringEscapeUtils.unescapeJava(requestInput.toString())

解决了这个问题。

相关问题