首页 > 解决方案 > 让 pandas 将 hive 的 collect_list 读取为 python 列表

问题描述

在使用 COLLECT_LIST 对 Hive 中的元素进行分组和收集时,可以将数据以“数组”形式放置。似乎熊猫.read_sql_query无法将此配置单元输出识别为列表,而只是将每一行解析为字符串。例如,在 hive 中分组和收集之后,行看起来像这样(这里 category_id 是表上的一个 int 列,从中检索数据):

SELECT
user_id,
COLLECT_LIST(category_id) as session
FROM tracks_table
GROUP BY user_id

user_id    session
---------------------------------------------------------
42         [164792,164792,4862,4862,4862,164792,164792]
117        [2378,4598,69033,993332,1189345]

但是当建立连接并使用 pandas 执行查询时,pd.read_sql_query它会像(字符串)一样读取:

'[164792,164792,4862,4862,4862,164792,164792]'
'[2378,4598,69033,993332,1189345]' (as stings)

这不是内存效率,并且意味着我要编写一个自定义(虽然简单)的解析函数。我正在处理的数据量很大,因此内存是一个严重的问题。

是否可以选择更改熊猫解析方法或查询以直接将其作为列表读取?

我知道从 pandas >= 1.3 有一个参数dtype,但它无法识别list或输入np.array。预先感谢您!

标签: pythonsqlpandashive

解决方案


推荐阅读