我目前正在尝试为每个组创建一个连接字符串。此字符串应该是字段所有出现的串联。
目前我的代码如下:
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;
}
事情是我绝对不知道每个组的不同字段的数量或它们包含的内容。我不知道如何替换?
并使其工作。
答案 0 :(得分:3)
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
。