hive transform Python采坑全纪录

本文记录了在Hive上运行Python代码时遇到的问题及解决办法,包括权限问题、文件上传路径、多文件调试、编码问题以及Python正则表达式在不同环境下的差异。通过解决这些问题,成功在Hive中执行Python脚本并处理中文数据。
摘要由CSDN通过智能技术生成

最近在搞一些数据挖掘的东西。之前写的Python代码要放到hive上运行。记录一下踩的坑。

1. add、transform权限问题。

找了半天没有中文解决方案,只有英语解决方案,顺着找到了官方文档(英文):SQL Standard Based Hive Authorizationhttps://cwiki.apache.org/confluence/display/Hive/SQL+Standard+Based+Hive+Authorization#SQLStandardBasedHiveAuthorization-RestrictionsonHiveCommandsandStatements但是我照着改了配置,hive重启,然后崩了。。

hive只好退回改配置之前的版本。

后来同事改了个什么配置,现在又能用了。。

2. add file 的地址。

我add file 后面加本地服务器的地址貌似不行,需要先把文件上传到hdfs上。

hdfs dfs -put /usr/opt/datas/...../hive_unflod_specify.py(本地文件地址) /udf/hive_hql/(hdfs地址)

再从hdfs上传到hive上。

add file hdfs:///udf/hive_hql/hive_unflod_specify.py

3. Python debug之多文件问题。

用hive的transform跑代码,很崩溃的是你看不到报错信息,只知道是编译时出错还是运行时出错。

我用的debug方法是二分法,先用一个简单的.py文件把跑通,再把你的报错代码注释掉一部分。这样一步步通过控制变量的方法来定位bug。

我发现好像上传到hive上无法文件相互调用。还好这不是什么大问题,就把所有内容放到一个文件里去呗。

4. Python debug之编码问题。

hive默认的是ASCII码,这个码无法处理中文。所以如果要处理中文需要在文件头部加上以下代码:

import sys

#需要加载以下两行,否则无法导出中文。
reload(sys)
sys.setdefaultencoding('utf-8')

5. Python正则表达式问题。

hive上自带的Python是2.7.5版的,需要注意它与Python3版本存在不同。而且装包什么的还很麻烦,因为装包要先装pip,装pip需要装其它东西,而且如果是生产环境不联网又很麻烦。

正则表达式问题跟之前编码问题有关。例如这样的正则表达式在win上可以run,但在Linux+Python2.7上并不能提取出东西。

a='原告于2016年8月9日向国家知识产权局申请名称为“一种用于平板拖把挤水和清洗的拖把桶”的实用新型专利,于2017年4月12日获得授权,专利号为zl20162085××××.2,该专利至今有效。'
p4=re.compile('专利号为:?[zlZL]{0,2}[0-9×xX ]{8,16}\.[0-9×xX]',re.I)
p4.findall(a)
# 输出[]

通过用之前的二分法定位bug,发现是“?” 的问题,前面的“:”是Unicode字符。

解决方案是把正则表达式字符串和待匹配字符串都转换成‘utf-8’的形式,其中前者可以简写为前面加u:

a='原告于2016年8月9日向国家知识产权局申请名称为“一种用于平板拖把挤水和清洗的拖把桶”的实用新型专利,于2017年4月12日获得授权,专利号为zl20162085××××.2,该专利至今有效。'
p4=re.compile(u'专利号为:?[zlZL]{0,2}[0-9×xX ]{8,16}\.[0-9×xX]',re.I)
p4.findall(a.decode('utf-8'))

输出结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值