ApachePig—我想用pig拉丁脚本将Map转换为字段

pgccezyw  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(319)

我的关系(a)的元组描述如下:{a:int,b:int,c:map[]}Map只包含一个字符,但密钥是不可预测的。例如,我的元组示例如下:

(1, 100, [key.152#hello])
(8, 110, [key.3000#bonjour])
(5, 103, [key.1#hallo])
(5, 103, [])
(8, 104, [key.11#buenosdias])
...

我想把我的关系(a)转换成b关系,这样b描述将是:{a:int,b:int,c:chararray}
对于我的样本,它会给出:

(1, 100, hello)
(8, 110, bonjour)
(5, 103, hallo)
(8, 104, buenosdias)
...

(我也想过滤空Map)
有什么想法吗?
谢谢您。

c90pui9n

c90pui9n1#

尽管编写udf是正确的解决方案,但是如果您想使用regex快速地修改某些内容,那么下面的解决方案可能会有所帮助。

A = LOAD 'sample.txt' as (a:int, b:int, c:chararray);
B = FOREACH A GENERATE a, b, FLATTEN(STRSPLIT(c, '#', 2)) as (key:chararray, value:chararray);
C = FOREACH B GENERATE a, b, FLATTEN(STRSPLIT(value, ']', 2)) as (value:chararray, ignore:chararray);
D = FILTER C BY value is not null; 
E = FOREACH D GENERATE a, b, value;
STORE E INTO 'output/E';

用于样本输入

1       100     [key.152#hello]
8       110     [key.3000#bonjour]
5       103     [key.1#hallo]
5       103     []
8       104     [key.11#buenosdias]

上述代码生成以下输出:

1       100     hello
8       110     bonjour
5       103     hallo
8       104     buenosdias

相关问题