arrays - Hive 中是否有任何内置函数可以计算配置单元表中两个列表的交集?
问题描述
我有一个有 3 列的配置单元表:[“merchants_index”、“weeks_index”、“customer_index”]。最终目标是计算每周每个商家的回头客百分比。客户被重复,我的意思是,例如,在第 10 周购物的客户在前 4 周(第 6-9 周)也在同一商家购物。
这是我的方法:
第 1 步,为每个商家和每周创建一个本周的客户列表和前 4 周的另一个客户列表。
select
merchant_index,
week_index,
collect_set(customer_index) over(partition by merchants_index range between 0 preceding and current row) AS uniq_cust_current,
collect_set(customer_index) over(partition by merchants_index range between 4 preceding and 0 preceding) AS uniq_cust_repeat
from
source_table
第 2 步,使用 Spark,将一个 python 函数映射到 hive 表,该函数通过比较 hive 表的每一行的两个列表来计算所需百分比。
python函数是这样的:
len(numpy.intersect1d(uniq_cust_current, uniq_cust_repeat))* 1.0/ len(uniq_cust_current)
另外,我只有 hive 和 spark 中的内置函数可用。
我同时涉及 Hive 和 spark 的原因是我不知道如何比较 Hive 上的列表,也不知道如何在 Spark 中进行移动窗口计算。
但是,由于 hive 表很大,超过 100M 行,第一步的输出需要太多内存,因此作业被终止。
任何帮助将非常感激。
解决方案
有一个 Spark 功能array_intersect
:
array_intersect(array1, array2) - 返回 array1 和 array2 交集的元素数组,没有重复。
推荐阅读
- java - java和actionscript类没有被嘲笑
- kubernetes - 避免在将虚拟机作为节点运行的同一物理主机上调度多个 pod 实例
- mysql - MaraiDB / MySQL 从选择查询插入表但重复键使用选择查询中的数据
- asp.net-core - EF Core 2.1(查询类型)中数据库视图的 Scaffold-DbContext
- java - 当 Secure feature proccesing 设置为 true 时不能使用扩展函数
- solr - 更改 Lucidworks Fusion 3.15 默认集群
- r - 如何将二进制文件从云对象存储保存到笔记本文件系统?
- docker - 修改 docker 容器内的 sysctl 参数
- angular - LimitToFirst AngularFire Observable
- java - Spring @ConfigurationProperties 不映射对象列表