hive中剔除非utf8编码的数据

在Hive数据导出过程中,由于数据编码不一致,导致出现编码转换错误。本文通过Python脚本来过滤掉混杂的GBK编码数据,保持UTF8编码。脚本利用UnicodeDecodeError异常来识别非UTF8字符,并在Hive中使用TRANSFORM功能结合脚本进行处理。
摘要由CSDN通过智能技术生成

最近在做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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值