irpas技术客

hive transform Python采坑全纪录_李贽

未知 3822

最近在搞一些数据挖掘的东西。之前写的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.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #hive #transform #Python采坑全纪录 #最近在搞一些数据挖掘的东西 #记录一下踩的坑