千家信息网

hive+python数据分析是怎么入门的

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,本篇文章为大家展示了hive+python数据分析是怎么入门的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。为什么要使用hive+python来分析数据举个例
千家信息网最后更新 2025年02月03日hive+python数据分析是怎么入门的

本篇文章为大家展示了hive+python数据分析是怎么入门的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

为什么要使用hive+python来分析数据

举个例子,

当年没有数据库的时候, 人们通过编程来操作文件系统, 这相当于我们编写mapreduce来分析数据.

后来有了数据库, 没人再操作文件系统了(除非有其它需求), 而是直接使用sql再加一些数据的处理. 这就相当于 hive + python了

hive + python能解决大多的需求, 除非你的数据是非结构化数据, 此时你就回到了远古时代不得不写mapreduce了.

而为什么不使用hive+java, hive+c, hive+...

因为:

python真是太好用了, 脚本语言, 无需编译, 有强大的机器学习库, 适合科学计算(这就是数据分析啊!!)


使用hive+python来分析数据

hive与python的分工: 使用hive sql作为python的数据源, python的输出作为map的输出, 再使用hive的聚合函数作为reduce.

下面使用一个例子来分析: 统计每个人在某日期人下吃的各种食品的数量

建表 user_foods 用户食品表

hive> create table user_foods (user_id  string, food_type string, datetime string)  partitioned by(dt string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE# partitioned by(dt string) 以日期分区# 以\n分隔, 字段与字段间以\t分隔.

根据业务需要, 因为是按天来统计, 为减少分析时的数据量, 上述hive表以dt(日期)为分区.

创建Hive表后, 会在HDFS /hive/目录下创建一个与表名同名的文件夹

导入数据

建立分区

hive> ALTER TABLE user_foods ADD PARTITION(dt='2014-06-07');

创建分区后, hdfs目录/hive/user_foods/下多了一个df='2014-06-07'的目录

创建测试数据

创建一个文件如data.txt, 加入测试数据

user_1     food1   2014-06-07 09:00user_1  food1   2014-06-07 09:02user_1  food2   2014-06-07 09:00user_2  food2   2014-06-07 09:00user_2  food23  2014-06-07 09:00

导入数据

hive> LOAD DATA LOCAL INPATH '/Users/life/Desktop/data.txt' OVERWRITE INTO TABLE user_foods PARTITION(dt='2014-06-07');

导入成功后, 使用select * from user_foods查看下.

或使用

hive> select * from user_foods where user_id='user_1'

这会生成一个mapreduce

仅使用hive来分析

"统计每个人在某日期人下吃的各种食品的数量" 太过简单, 不需要python就可实现:

hive> select user_id, food_type, count(*) from user_foods where dt='2014-06-07' group by user_id, food_type;

结果:

结合使用python

如果需要对数据清洗或更进一步处理, 那么肯定需要自定义map, 这就可以使用python来实现了.

比如food2与food23认为是同一类型食品, 此时利用python进行数据清洗, python的脚本如下: (m.py)

#!/usr/bin/env python#encoding=utf-8import sys       if __name__=="__main__":    # 解析每一行数据    for line in sys.stdin:        # 略过空行        if not line or not line.strip():            continue        # 这里用try 避免特殊行解析错误导致全部出错        try:            userId, foodType, dt = line.strip().split("\t")        except:            continue        # 清洗数据, 空数据略过        if userId == '' or foodType == '':            continue        # 清洗数据        if(foodType == "food23"):                foodType = "food2"                # 输出, 以\t分隔, 即map的输出        print userId + "\t" + foodType

再使用hql结合python脚本来分析, 有以下两步.

1. 加入python脚本, 相当于将脚本加入到 distributed cache

2. 执行, 使用transform和using

hive> add file /Users/life/Desktop/m.py;hive> select user_id, food_type, count(*) from (select transform (user_id, food_type, datetime) using 'python m.py' as (user_id, food_type)from user_foods where dt='2014-06-07') tmp group by user_id, food_type;

结果:

python脚本调试建议

1. 首先保证脚本没有语法错误, 可以执行python m.py来验证
2. 确保代码没有其它输出
3. 可以使用测试数据来测试脚本, 比如:

$> cat data.txt | python m.pyuser_1  food1user_1  food1user_1  food2user_2  food2user_2  food2

1, 2, 3都正确后, 如果再使用hive+python有错误, 可能的错误有:

1. python脚本对数据的处理不健壮, 有些边界条件没有考虑, 导致python出现exception

2. 自己总结吧...

其它

上面这个例子的python脚本充当map的角色, 当然也可以再建立一个reduce.py来统计map的输出而不使用hive的聚合函数.

这是建立在hive已不能满足你的需求之上的.

上述内容就是hive+python数据分析是怎么入门的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

数据 分析 脚本 输出 文件 日期 错误 食品 测试 清洗 统计 数据分析 例子 目录 需求 处理 内容 函数 字段 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 位置共享如何设置到服务器 2012数据库提示评估 网络安全课堂活动 网络安全的应对与预防 台达服务器报警rl045 数据库还原文件怎么打开方式 宁波万千星网络技术 游戏中什么是数据库错误 综合网络技术推广品质保障 闵行区创新数据库服务销售 免费网络安全视频素材 服务器配置多系统 常用的中文数据库不包括 管理服务器和受管服务器关系 自主机器人软件开发现状 数据库中的字段是单元格吗 网络技术基础 第三次作业 渝中区企业网络技术服务活动 我国网络安全产业发展进展 吉普车视频软件开发 昆明国家网络安全宣传 游戏中什么是数据库错误 综合网络技术推广品质保障 生物实验室网络安全对固件的优化 浙江吉洋互联网科技 三级网络技术一个礼拜 网络安全信息教育简报 成本软件开发公司 北京搞软件开发 外文数据库怎样看出是核心期刊
0