千家信息网

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

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章为大家展示了hive+python数据分析是怎么入门的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。为什么要使用hive+python来分析数据举个例
千家信息网最后更新 2026年11月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安全错误 数据库的锁怎样保障安全 互联网科技公司简介 广州万易互联网科技有限公司 互联网科技公司华为 南京欣网互联网科技 天津摩尔互联网科技 云创客互联网科技公司 互联网系的金融科技公司 中国航天科技大学国际工业互联网 晓花互联网科技有限公司网址 崇明区互联网教育科技售后服务 搜狐科技互联网 深圳育鹏互联网科技有限公司招聘 内蒙古九一互联网科技 恒生互联网科技业指数调整周期 烟台灵鸽互联网科技有限公司 广州百诚互联网科技有限公司官网 四川互联网展示科技馆设计 银川新华互联网科技学校原画 互联网时代高科技布局 三亚科技创新互联网基地 互联网公司 科技公司 猪兼强互联网科技 广州宏创互联网科技 互联网金融科技平台 天扬科技互联网广告 四个字互联网科技公司取名 广州恒生互联网科技有限 互联网和黑科技的看法 互联网金融运营模式中的金融科技 互联网科技职业技能培训学校
0