【发布时间】:2018-11-07 12:52:03
【问题描述】:
我正在尝试创建一个数据集,在其中我根据另一列的值聚合一列。举个例子
id | score | id2 | offensive
---------+-------+-----+-----------
a1 | 1.2 | 1 | false
a2 | 36.0 | 1 | true
a3 | 1.2 | 1 | true
a4 | 36.0 | 1 | false
我想要的最终是创建一个包含两个列表的数组,以按攻击性列和与之相关的 id 进行分组,并按得分值对它们进行排序。类似于以下内容:
id |id2 | clean_group | offensive_group
---------+-----+-------------+-----------------
a1 | 1 | [a2, a3] | [a4, a1]
a2 | 1 | [a2, a3] | [a4, a1]
a3 | 1 | [a2, a3] | [a4, a1]
a4 | 1 | [a2, a3] | [a4, a1]
我知道这是冗余数据,但这是要求,应该注意 id 将是不同且唯一的,并且 id2 都将相同。我一直在查看 presto 中的 array_agg 函数和 hive 中的 collect_set 来尝试完成此操作,但遇到了很多麻烦。
有人可以帮忙吗?我们是否能够以某种方式在我们所说的 array_agg(id where offensive=true) 等处传递条件。
【问题讨论】: