最近在做hive数据导出的时候,发现有很多数据行存在不一致的编码的类型,导致编码转换的时候,遇到错误,比如一行数据中又存在utf8编码的数据,又存在gbk编码的数据,而对于中文来说,gbk和utf8的编码是不一样的。所以一旦为gbk的数据用utf8进行解码的时候,会报错。因此,需要将这部分混在utf8编码数据中的gbk编码数据剔除掉。
利用python脚本,然后进行transform,来完成剔除的步骤。
代码如下,利用原理,就是进行decode解码的时候,如果解码错误,则表示非utf8字符类型。
#!/usr/bin/python
import sys
import datetime
UTF8='utf8'
OTHER='other'
for line in sys.stdin:
try:
line = line.strip()
arr = line.split('\t')
item=""
for item in arr:
item.decode(UTF8)
print UTF8+"\t"+arr[0]
except UnicodeDecodeError:
print OTHER+"\t"+arr[0]
except:
print OTHER+"\t"+arr[0]
在hive中使用如下:
SELECT