首页 > 解决方案 > 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 行,第一步的输出需要太多内存,因此作业被终止。

任何帮助将非常感激。

标签: arraysapache-sparkhiveapache-spark-sqlhiveql

解决方案


有一个 Spark 功能array_intersect

array_intersect(array1, array2) - 返回 array1 和 array2 交集的元素数组,没有重复。


推荐阅读