pyhive入门介绍和实例分析(探索票价与景点评分之间是否存在相关性)

本文主要是介绍pyhive入门介绍和实例分析(探索票价与景点评分之间是否存在相关性),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

PyHive 是一组 Python DB-API 和 SQLAlchemy 接口,可用于 Presto 和 Hive。它为 Python 提供了一个与 Presto 和 Hive 进行交互的平台,使得数据分析师和工程师可以更方便地进行数据处理和分析。

以下是使用 PyHive 进行数据分析时需要注意的几点:

  1. 安装和配置: 在开始之前,确保已经安装了以下软件:

    • Pip
    • Python 建议使用anaconda方便管理
    • JDK 注意兼容性
    • HivePresto
    • 版本兼容性: 确保 PyHive 版本与 Hive 或 Presto 版本兼容。不同版本之间可能会有一些差异,需注意兼容性。
      安装 PyHive 可以使用以下命令:
    pip install pyhive [hive]
    

    如果你想安装 Presto 驱动器,请使用以下命令:

    pip install pyhive [presto]
    
  2. 连接 Hive 数据库: 使用 PyHive 连接 Hive 数据库非常简单。你需要传递正确的连接参数,例如:

    from pyhive import hive
    connection = hive.Connection(host='localhost', port=10000, database='mydatabase')
    
  3. 执行查询: 使用 PyHive 执行查询也很容易,只需使用游标对象来执行查询:

    cursor = connection.cursor()
    cursor.execute('SELECT * FROM mytable')
    result = cursor.fetchall()
    for row in result:print(row)
    
  4. 使用 Pandas 进行数据分析: 如果你更喜欢使用 Pandas 进行数据分析,可以将查询结果转换为 Pandas DataFrame

    import pandas as pd
    df = pd.read_sql('SELECT * FROM mytable', connection)
    print(df)
    

代码示例

from pyhive import hive# 设置连接参数
host = 'your_host'
port = 10000
username = 'your_username'
password = 'your_password'
database = 'your_database'# 建立连接
conn = hive.Connection(host=host, port=port, username=username, password=password, database=database)# 创建 Cursor 对象
cursor = conn.cursor()# 执行查询
query = "SELECT * FROM your_table LIMIT 10"
cursor.execute(query)# 获取查询结果
results = cursor.fetchall()# 处理结果
for row in results:print(row)# 关闭连接
cursor.close()
conn.close()

分析实例

现有两个hive表,表结构大约为:

image.png
image.png

需要实现需求:

票价与评分的关系: 探索票价与景点评分之间是否存在相关性。分析不同票价档次下景点的评分分布情况,以确定价格对游客评价的影响程度。

首先 找到所有非空的景区,

在xiecheng表中找到所有averagescore不为null的数据,在qvna表中找到所有price不为null的数据。

联合查询:
将两表所需数据放在一起。

将查询到的数据放到新的表中以方便后续查找和使用:

分类查找并计算平均值:

代码:


# Author: 冷月半明
# Date: 2023/12/6
# Description: This script does XYZ.from pyhive import hivedef creatConnection():conn = hive.Connection(host='******', port=10000, username='root')return conn# 连接到 Hive
conn = creatConnection()
cursor = conn.cursor()# 进入数据库
query = "use cjw_data"
cursor.execute(query)
# 查询去哪价格非空的景区
# query = "SELECT id,price FROM qvna WHERE price IS NOT NULL"
# 查询携程平均分非空的景区
# query = "SELECT id,averagescore FROM xiecheng WHERE averagescore IS NOT NULL"
# 将查询到的id,title,价格,平均分等数据存储到新的表中
# query = "CREATE TABLE priceAndCore AS " \
#         "SELECT qvna_clean.id,title,price,averagescore "\
# "FROM "\
# "    (SELECT id ,title,price FROM qvna WHERE price IS NOT NULL) AS qvna_clean "\
# "JOIN "\
# "    (SELECT id,averagescore FROM xiecheng WHERE averagescore IS NOT NULL) AS xiecheng_clean "\
# "ON qvna_clean.id = xiecheng_clean.id " \
#         # " LIMIT 5"\# 计算各个区间票价景点之间的平均评价分
query = "SELECT "\" CASE "\"     WHEN price <= 50 THEN '低' "\" WHEN price <= 100 THEN '中' "\"  ELSE '高' "\"  END AS price_level, "\"AVG(averagescore) AS average_score "\
"FROM "\
"    priceAndCore "\
"GROUP BY "\
"    CASE "\
"        WHEN price <= 50 THEN '低' "\
"        WHEN price <= 100 THEN '中' "\
"        ELSE '高' "\
"    END"\# " LIMIT 5"\cursor.execute(query)
tables = cursor.fetchall()
print('行数',len(tables))# 打印数据库列表
for tables in tables:print(tables)# 关闭连接
cursor.close()
conn.close()

这篇关于pyhive入门介绍和实例分析(探索票价与景点评分之间是否存在相关性)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/851688

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

PyQt6 键盘事件处理的实现及实例代码

《PyQt6键盘事件处理的实现及实例代码》本文主要介绍了PyQt6键盘事件处理的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录一、键盘事件处理详解1、核心事件处理器2、事件对象 QKeyEvent3、修饰键处理(1)、修饰键类

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文