在我的Pig脚本(0.9.2)中,我的最终输出如下所示:
final: {email: chararray,{(name: chararray,percent: double)}}
对于每个电子邮件地址,我最多有3个姓名和分数.所以,输出看起来像这样:
joe@smith.com {(Joe Smith, 0.5),(Joseph, 0.1), (Joey, 0.1)}
我真正想要做的是将其展平为带标签的分隔值(没有括号或花括号),以便更容易进入这样的MySQL表:
joe@smith.com Joe Smith 0.5 Joseph 0.1 Joey 0.1
我怎样才能在Pig中实现这一目标?或者我必须编写自定义UDF?
您需要为此编写自定义udf.您可以使用Python等语言轻松完成此操作.做一些像:
@outputSchema("flat_bag:bag{}")
def flattenBag(bag):
flat_bag = [item for tup in bag for item in tup]
return flat_bag
Run Code Online (Sandbox Code Playgroud)
只需将其放入.py文件并加载它:
REGISTER '/path/to/udfs.py' using jython as py_funcs;
Run Code Online (Sandbox Code Playgroud)
然后使用它像:
final1 = FOREACH final GENERATE email, py_funcs.flattenBag($1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2907 次 |
| 最近记录: |