Я начинаю писать Python и Pig UDF и бороться с преобразованием кодировки входного файла с помощью PIG.PIG UDF (Python) Кодировка кодировки
Просмотренный stackoverflow и весь интернет в течение нескольких дней, попробовал кучу разных вещей, но я все еще беспомощен.
Надеюсь, кто-то может дать мне мягкий толчок в правильном направлении.
Окружающая среда: реальная распределенная Hadoop кластера (нет локального экземпляра)/Cloudera сконфигурировано с utf-8
и Apache Pig version 0.12.0
Мой исходный файл закодирован с iso-8859-1
и цель состоит в том, чтобы сохранить его содержимое в utf-8
(после или перед несколькими другими операциями внутри свиней).
Входной файл выглядит следующим образом (пара ASCII/ISO-8859-1 символов для целей тестирования - один символ в каждой строке):
ù
û
ü
ÿ
à
â
æ
ç
é
è
ê
ë
î
ô
Это мой Pig- Сценарий:
RMF $output;
REGISTER 'charsetConversion.py' using org.apache.pig.scripting.jython.JythonScriptEngine AS pyudf;
data = LOAD '$input' USING PigStorage() AS (col1:chararray); --col1:bytearray
final = foreach data generate $0, pyudf.toUTF8(col1);
STORE final INTO '$output' USING PigStorage();
И мой UDF (написано в питоне):
#!/usr/bin/env python
# charsetConversion.py
@outputSchema("word:chararray")
def toUTF8(s):
return unicode(s, 'iso-8859-1').encode('utf-8')
После запуска/представления сценария я получил следующий вывод:
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
� \t �
В второй столбец я ожидал бы такую же удобочитаемую оценку как во входном файле, а не �
.
Что здесь происходит?
Насколько мой подход рекомендуется вообще?
Какие существуют другие подходы (без java Stackoverflow: Encoding in Pig - Java solution)?
Большое спасибо за любые советы.