Apache Pig:组操作后的条带命名空间前缀(::)

Nic*_*ick 9 apache-pig

我的数据处理中的一个常见模式是按一组列进行分组,应用过滤器,然后再次展平.例如:

my_data_grouped = group my_data by some_column;
my_data_grouped = filter my_data_grouped by <some expression>;
my_data = foreach my_data_grouped flatten(my_data);
Run Code Online (Sandbox Code Playgroud)

这里的问题是,如果my_data在此操作之后以类似(c1,c2,c3)的模式开始,它将具有类似(mydata :: c1,mydata :: c2,mydata :: c3)的模式.如果列是唯一的,有没有办法轻松剥离"mydata ::"前缀?

我知道我可以这样做:

my_data = foreach my_data generate c1 as c1, c2 as c2, c3 as c3;
Run Code Online (Sandbox Code Playgroud)

然而,对于具有大量列的数据集而言,这很难维护并且对于具有可变列的数据集是不可能的.

bar*_*red 1

您可以将“AS”语句与“foreach”放在同一行。

IE

my_data_grouped = group my_data by some_column;
my_data_grouped = filter my_data_grouped by <some expression>;
my_data = FOREACH my_data_grouped FLATTEN(my_data) AS (c1, c2, c3);
Run Code Online (Sandbox Code Playgroud)

但是,这与在 2 行上执行相同,并且不会缓解“具有可变列的数据集”的问题。