我是一个Python和Pig UDF编写的初学者,在使用PIG时遇到了输入文件的字符集转换问题。
我在StackOverflow和整个互联网上搜索了几天,尝试了很多不同的方法,但我仍然无助。
希望有人能给我指点一下方向。
环境:真实分布式Hadoop集群(没有本地实例)/ Cloudera配置为utf-8
和Apache Pig版本0.12.0
我的源文件以iso-8859-1
编码,目标是将其内容存储为utf-8
(在pig中进行其他操作之前或之后)。
输入文件看起来像这样(为测试目的而包含几个ASCII / iso-8859-1字符 - 每行一个字符):
ù
û
ü
ÿ
à
â
æ
ç
é
è
ê
ë
î
ô
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();
#!/usr/bin/env python
# charsetConversion.py
@outputSchema("word:chararray")
def toUTF8(s):
return unicode(s, 'iso-8859-1').encode('utf-8')
运行/提交脚本后,我得到了以下输出:
� �
� �
� �
� �
� �
� �
� �
� �
� �
� �
� �
� �
� �
� �
� �
� �
� �
� �
� �
� �
� �
�
。这是怎么回事?
我的方法是否可行?
还有哪些其他方法可以使用(不需要使用Java,参见Stackoverflow: Encoding in Pig - Java solution)?
非常感谢您提前的帮助和任何建议。