首页 > 解决方案 > 与 RJDBC 相比,使用 pyhive 读取大型 Hive 表的性能较慢

问题描述

我正在尝试使用 pyhive 从 python 中的 Hive 读取一个大表,该表有大约 1600 万行。但这大约需要33 分钟。当我用 RJDBC 读取 R 中的同一张表时,读取整个表大约需要13 分钟。这是我的代码

library(RJDBC)

driver <- try(JDBC("org.apache.hive.jdbc.HiveDriver", paste0(jar_dir, '/hive-jdbc-3.1.2-standalone.jar')))
con_hive <- RJDBC::dbConnect(driver, "jdbc:hive2://hive_ip:10000/dev_perm")
query <- "SELECT * FROM mi table WHERE periodo='2020-02-01'"
replica_data <- dbGetQuery(con_hive, query)

在python中我的代码是

import pyhive
conn = hive.Connection(host=ip_hive)
curs = conn.cursor()
cursor.execute("SELECT * FROM mi table WHERE periodo='2020-02-01'")
results = pd.DataFrame(cursor.fetchall(), columns=[desc[0] for desc in cursor.description])

我已经尝试在python中设置多个cursor.arraysize,但它并没有提高性能,而且我注意到当我设置一个大于10000的arraysize时,配置单元会忽略它并设置10000。默认值为1000。

我可以做些什么来提高我在 python 中读取 Hive 表的性能?

标签: pythonhivebigdatapyhive

解决方案


推荐阅读