如果输入数据中也存在分隔符,那么我的建议是使用Regex 而不是任何加载技术(PigStorage,CSVStorage)。这将为您的输入提供更灵活的控制。我同意许多人不会因为性质复杂而选择Regex,但是使用正则表达式可以轻松解决这类问题。
示例
输入
"Name";"Age";"Address";"Resume contains special char like ;,$#$@^";"Rating"
"Name1";"Age1";"Address1";"Resume;$# contains ;@^ special char like ;,$#$@^";"Rating"
PigScript:
A = LOAD 'input' AS (line:chararray);
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line,'("\\w+");("\\w+");("\\w+");("[\\w+\\s;$,#@^]+");("\\w+")')) AS(name,age,address,resume,rating);
C = FOREACH B GENERATE resume;
DUMP C;
输出:
("Resume contains special char like ;,$#$@^")
("Resume;$# contains ;@^ special char like ;,$#$@^")
注意:
这是一个非常通用的解决方案,无论您的输入 column(resume) 中存在任何数量的特殊字符,它都可以正常工作。在这个脚本中,我只打印了resume column,如果您需要其他列,请包含在relation C 中。