python - 让 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
。预先感谢您!
解决方案
推荐阅读
- ios - 如何在 Swift 5 中将 UIView 设置为半圆形
- html - 如何将 div 完全包裹在子 div 周围以避免溢出?
- javascript - 如何在 Vue JS 中添加 window.addEventListener 和删除 window.removeEventListener
- javascript - 如何提高 videojs-record 中 exportImage() 函数截取的屏幕截图质量
- python - 在表单中使用动态选项时,ValueError 需要解压的值太多(预期为 2)
- homebrew - 无法在我的 m1 macbook 上安装自制软件
- laravel - 未选择任何内容时如何删除选择框数组中的空值
- git - Azure devops - 比较两个分支时忽略保存到 git 的某些文件
- python - Pandas - 多列上的 idxmin 保持所有联系
- asp.net-core - 验证范围是否存在