IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> hive transform Python采坑全纪录 -> 正文阅读

[大数据]hive transform Python采坑全纪录

最近在搞一些数据挖掘的东西。之前写的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'))

输出结果:

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:37:17  更:2022-03-15 22:40:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:47:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码