我有以下数据(加载在变量a中):
(a1:a2:a3|a4:a5:a6)
(b1:b2:b3)
(c1:c2:c3|c4:c5:c6|c7:c8:c9)
我希望我的最终输出如下:
(a1:a2:a3)
(a4:a5:a6)
(b1:b2:b3)
(c1:c2:c3)
(c4:c5:c6)
(c7:c8:c9)
以下是我所做的:
B = foreach B generate flatten(STRSPLIT($0, '\\|')) as splitted:chararray;
这将数据转换为:
(a1:a2:a3,a4:a5:a6)
(b1:b2:b3)
(c1:c2:c3,c4:c5:c6,c7:c8:c9)
具有以下结构:
B: {splitted: chararray}
然而,当我试图将这个字符展平为单独的元组时,它只会吐出第一项。我尝试了几种不同的方法来获得我想要的输出,但我总是得到第一项。以下是我尝试过的几件事:
req_output = foreach B generate flatten(STRSPLIT(splitted, ','));
req_output = foreach B generate flatten(TOBAG(*));
在这两种情况下,我得到以下输出:
(a1:a2:a3)
(b1:b2:b3)
(c1:c2:c3)
我不知道为什么会这样。如何将所有项作为不同的元组?我没有太多的经验,所以在Pig,任何帮助将不胜感激。
1条答案
按热度按时间rqqzpn5f1#
在
relation B
您只存储第一项(即splitted variable
),这就是这个问题的原因。你能去掉这个变量吗splitted
从关系b?到
你可以用两种方法来解决这个问题。
输入:
选项1:使用标记化
选项2:使用strsplit+tobag
选项3:使用strsplittobag(仅限pig版本0.14)
输出: