在Apache Pig中将字符串按斜杠拆分并换行输出的问题
Pig处理斜杠分隔字符串拆分换行问题
需求与问题
需要将数据集中用斜杠(/)连接的字符串拆分后,每行输出一个带括号的元素:
- 输入示例:
(David Jones / John Smith)
- 期望输出:
(David Jones) (John Smith)
当前使用的代码:
A = FOREACH data GENERATE FLATTEN(STRSPLIT(name,'/',2)); DUMP A;
终端输出结果不符合预期,得到的是:
(David Jones, John Smith)
解决方案
问题在于原代码仅拆分并展开了字符串,但没有对每个拆分后的元素单独包裹括号,且分隔符未匹配原字符串中的空格。调整后的代码如下:
-- 拆分字符串为数组,注意分隔符包含前后空格 split_data = FOREACH data GENERATE STRSPLIT(name, ' / ', 2) AS split_names; -- 遍历数组元素,给每个元素添加括号并展开 result = FOREACH split_data GENERATE FLATTEN( TRANSFORM(split_names, name_part) GENERATE CONCAT('(', TRIM(name_part), ')') ); DUMP result;
代码说明
STRSPLIT(name, ' / ', 2):使用包含空格的分隔符' / '拆分,避免拆分后的元素带多余空格;2表示最多拆分成2个元素。TRANSFORM(split_names, name_part):遍历拆分得到的数组,对每个元素执行处理。CONCAT('(', TRIM(name_part), ')'):给每个元素前后添加括号,TRIM确保去除元素可能残留的空格。FLATTEN:将数组展开为多行,实现每行输出一个结果。
内容的提问来源于stack exchange,提问作者wasif ali
相关产品推荐
相关产品推荐

