group-by - 连接 pig 的每个字段?

标签 group-by concatenation apache-pig

我目前正在尝试为每个组创建一个连接字符串。该字符串应该是所有出现的字段的串联。

目前我的代码如下所示:

grouped = GROUP a by group_field;

b = FOREACH grouped {
    unique_field = DISTINCT myfield;
    tupl = TOTUPLE(unique_field) ; 
    FOREACH tupl GENERATE group as id, CONCAT( ? ) as my_new_string;
}

问题是我绝对不知道每个组的不同字段的数量或它们包含的内容。我不知道如何替换 ? 并使其正常工作。

最佳答案

TOTUPLE没有做你所期望的事情,它正在创建一个单元素元组,其中一个元素是unique_field的包。

此外,CONCAT只需要连接两件事,并且必须明确定义它们。假设您有一个类似 A: {A1: chararray, A2: chararray, A3: chararray} 的架构,并且您希望将所有字段连接在一起。您必须这样做(这显然不理想):CONCAT(CONCAT(A1, A2), A3)

无论如何,这个问题可以通过 python UDF 轻松解决。 .

myudfs.py

#!/usr/bin/python

@outputSchema('concated: string')
def concat_bag(BAG):
    return ''.join(BAG)

此 UDF 将在您的脚本中使用,例如:

Register 'myudfs.py' using jython as myfuncs;

grouped = GROUP a by group_field;

b = FOREACH grouped {
    unique_field = DISTINCT myfield;
    GENERATE group as id, myfuncs.concat_bag(unique_field);
}

我刚刚注意到 FOREACH tupl GENERATE ... 行。这不是有效的语法。嵌套 FOREACH 中的最后一个语句应该是 GENERATE

关于group-by - 连接 pig 的每个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21004418/

相关文章:

hadoop - Pig Latin 中的聚合值

mysql - 对维度进行分组的 SQL 场景

python - Pandas 在 groupby 内插值

c# - 在带有 GroupBy 和 Sum 聚合的 ObservableCollection 上使用 LINQ

sql - 如何在postgresql中将字段值与递归查询连接起来?

php - 串联运算符

Mysql - 计算按两列分组的排名

python - Tkinter 标签,类型错误 : cannot concatenate 'str' and 'instance' objects

hadoop - 如何在grunt shell中禁止显示信息消息 “io.bytes.per.checksum is deprecated”

hadoop - 加载时的子目录名称条件