在pig脚本中,我想找到一种方法来逃避数据中的分隔符,这样它就不会被解释为额外的列。例如,如果我使用冒号作为分隔符,并且我有一个值为“foo:bar”的列,我希望将该字符串解释为单个列而不让加载器在中间拾取逗号。
答案 0 :(得分:0)
您可以尝试http://pig.apache.org/docs/r0.12.0/func.html#regex-extract-all
A = LOAD 'somefile' AS (s:chararray);
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(s, '(.*) : (.*)'));
可能必须调整正则表达式。
答案 1 :(得分:0)
似乎Pig将输入作为字符串,它不是那么聪明,无法确定数据是什么或不是什么。
Pig Storage适用于Strong Tokenizer。所以,如果你想做像
这样的事情
a = LOAD '/abc/def/file.txt' USING PigStorage(':');
的
似乎没有解决你的问题。但是如果我们可以编写自己的PigStorage()方法,我们可能会遇到一些解决方案。
我会尝试发布代码来解决此问题。
答案 2 :(得分:0)
你可以使用STRSPLIT(字符串,正则表达式,限制);对于基于分隔符的列拆分。