我想对列的一个子集执行一个不同的操作。文档中说,这可以通过嵌套的foreach实现:
不能对字段子集使用distinct;为此,请使用foreach和嵌套块首先选择字段,然后应用distinct(请参见示例:嵌套块)。
对所有列执行不同的操作很简单:
A = LOAD 'data' AS (a1,a2,a3,a4);
A_unique = DISTINCT A;
假设我对跨a1、a2和a3执行distinct很感兴趣。有人能提供一个例子来说明如何按照文档中的建议使用嵌套foreach执行此操作吗?
以下是输入和预期输出的示例:
A = LOAD 'data' AS(a1,a2,a3,a4);
DUMP A;
(1 2 3 4)
(1 2 3 4)
(1 2 3 5)
(1 2 4 4)
-- insert DISTINCT operation on a1,a2,a3 here:
-- ...
DUMP A_unique;
(1 2 3 4)
(1 2 4 4)
6条答案
按热度按时间unftdfkk1#
ego6inou2#
我也希望这样做:“我想对列的子集执行一个不同的操作”。我的做法是:
我知道这不是一个如何按照文档中的建议执行嵌套foreach的示例;但这是一种在字段子集上执行distinct的方法。希望它能像我一样帮助到这里的人。
gpnt7bae3#
对于您指定的输入/输出,下面的工作。您可以更新您的测试向量,以澄清您需要什么不同于此。
hfwmuf9z4#
公认的答案是一个很好的解决方案,但是,如果您想对输出中的字段重新排序(我最近不得不做的事情),这可能不起作用。这里有一个替代方案:
当您对某些字段进行分组时,所选内容将在每个元组中为该组提供唯一的值。
b09cbbtk5#
这里有两种可能的解决方案,还有其他好的方法吗?
解决方案1(使用限值1):
解决方案2(使用distinct):
ljsrvy3e6#
将所有其他列分组,只将感兴趣的列投影到一个包中,然后使用
FLATTEN
再次展开: