Я создал пользовательскую функцию Hive, которая анализирует URL-адрес. URL-адрес содержит параметры запроса. Однако, когда я анализирую ввод в своей пользовательской функции, такие символы, как «=» и «&», преобразуются в тарабарщину.
Первоначально я полагался на метод toString()
String для преобразования Hive Text
в Java String. При таком подходе приведенные выше символы преобразуются в тарабарщину. Затем я попытался использовать 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 в Hive:
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
UTF-8
. Вот почему я указал это. Я выбираю поле JSON, в котором есть записи, содержащие веб-URL-адреса. Я хочу манипулировать этим JSON в своем UDF. Однако при доступе к нему в моей UDF с использованиемtoString()
или описанного выше подхода я получаю тарабарщину для символов=
и&
. - person okello   schedule 20.06.2016=
и&
имеют неверный формат; остальное остается нормально. - person okello   schedule 21.06.2016