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

介绍

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

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

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

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

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

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

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

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

    python 复制代码
    import pandas as pd
    df = pd.read_sql('SELECT * FROM mytable', connection)
    print(df)

代码示例

python 复制代码
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表,表结构大约为:

需要实现需求:

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

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

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

联合查询:

将两表所需数据放在一起。 将查询到的数据放到新的表中以方便后续查找和使用: 分类查找并计算平均值:

代码:

python 复制代码
# Author: 冷月半明
# Date: 2023/12/6
# Description: This script does XYZ.

from pyhive import hive

def 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()
相关推荐
多米Domi0117 小时前
0x3f第33天复习 (16;45-18:00)
数据结构·python·算法·leetcode·链表
Gofarlic_oms17 小时前
Windchill用户登录与模块访问失败问题排查与许可证诊断
大数据·运维·网络·数据库·人工智能
freepopo7 小时前
天津商业空间设计:材质肌理里的温度与质感[特殊字符]
python·材质
森叶7 小时前
Java 比 Python 高性能的原因:重点在高并发方面
java·开发语言·python
Zoey的笔记本8 小时前
2026告别僵化工作流:支持自定义字段的看板工具选型与部署指南
大数据·前端·数据库
小二·8 小时前
Python Web 开发进阶实战:混沌工程初探 —— 主动注入故障,构建高韧性系统
开发语言·前端·python
Lkygo8 小时前
LlamaIndex使用指南
linux·开发语言·python·llama
小二·8 小时前
Python Web 开发进阶实战:低代码平台集成 —— 可视化表单构建器 + 工作流引擎实战
前端·python·低代码
Wise玩转AI8 小时前
团队管理:AI编码工具盛行下,如何防范设计能力退化与知识浅薄化?
python·ai编程·ai智能体·开发范式
lingling0098 小时前
2026 年 BI 发展新趋势:AI 功能如何让数据分析工具 “思考” 和 “对话”?
大数据·人工智能·数据分析