Apache pig 如何在pig中使用管道分隔符将字符串数据拆分为数组?

Apache pig 如何在pig中使用管道分隔符将字符串数据拆分为数组?,apache-pig,Apache Pig,我试图编写pig脚本,获取如下字符串数据:abc | def | xyz,并尝试将这些值放入字符串数组中 如何拆分此字符串以获得类似[abc,def,xyz]的字符串数组 我试着使用STRSPLIT函数,但在我的例子中,拆分的数目是不固定的。管道分隔值的数量可能会有所不同,我需要所有这些值都位于该数组中 有什么建议吗?你的方向是对的,但有一点你没有注意到。当分割数不固定时,也可以使用它。UDF的第三个参数是您拥有的“拆分”数,但您可以传递一个负数,它将查找与表达式匹配的所有可能拆分 从: 极限

我试图编写pig脚本,获取如下字符串数据:abc | def | xyz,并尝试将这些值放入字符串数组中

如何拆分此字符串以获得类似[abc,def,xyz]的字符串数组

我试着使用STRSPLIT函数,但在我的例子中,拆分的数目是不固定的。管道分隔值的数量可能会有所不同,我需要所有这些值都位于该数组中


有什么建议吗?

你的方向是对的,但有一点你没有注意到。当分割数不固定时,也可以使用它。UDF的第三个参数是您拥有的“拆分”数,但您可以传递一个负数,它将查找与表达式匹配的所有可能拆分

从:

极限

如果值为正值,则正则表达式的编译表示形式的模式最多应用limit-1次,因此参数的值表示结果元组的最大长度。结果元组的最后一个元素将包含最后一次匹配后的所有输入

如果该值为负值,则不会对结果元组的长度应用任何限制

想象一下这个输入:

abc|def|xyz,1
abc|def|xyz|abc|def|xyz,2
您可以执行以下操作:

A = load 'data.txt' using PigStorage(',');
B = foreach A generate STRSPLIT($0,'\\|',-1);
输出将是:

DUMP B;

((abc,def,xyz))
((abc,def,xyz,abc,def,xyz))

你的方向是对的,但有一件事你没有注意到。当分割数不固定时,也可以使用它。UDF的第三个参数是您拥有的“拆分”数,但您可以传递一个负数,它将查找与表达式匹配的所有可能拆分

从:

极限

如果值为正值,则正则表达式的编译表示形式的模式最多应用limit-1次,因此参数的值表示结果元组的最大长度。结果元组的最后一个元素将包含最后一次匹配后的所有输入

如果该值为负值,则不会对结果元组的长度应用任何限制

想象一下这个输入:

abc|def|xyz,1
abc|def|xyz|abc|def|xyz,2
您可以执行以下操作:

A = load 'data.txt' using PigStorage(',');
B = foreach A generate STRSPLIT($0,'\\|',-1);
输出将是:

DUMP B;

((abc,def,xyz))
((abc,def,xyz,abc,def,xyz))

另一个可行的选择是使用TOKENIZE。建议采用@Balduz建议的解决方案

A = load 'data.txt' using PigStorage(',');
B = foreach A generate BagToString(TOKENIZE($0,'|'),',');
DUMP B;
输出:转储B:


另一个可行的选择是使用TOKENIZE。建议采用@Balduz建议的解决方案

A = load 'data.txt' using PigStorage(',');
B = foreach A generate BagToString(TOKENIZE($0,'|'),',');
DUMP B;
输出:转储B:


我还有一个问题…我得到的响应是STRUCT类型的,但我想将此数据存储在配置单元表中的数组类型变量中…这会导致类型不匹配…有什么解决方案吗???您可以尝试STRSPLITTOBAG我还有一个问题…我得到的响应是STRUCT类型的,但是我想把这些数据存储在一个数组类型变量的配置单元表中…这会导致类型不匹配…有什么解决方案吗???你可以试试STRSPLITTOBAG,谢谢Murali…Balduz给出的答案是有效的,但是我得到的响应是STRUCT类型的,我想把它存储在一个数组的配置单元表中…这会导致类型不匹配…有没有解决方案???感谢Murali…Balduz给出的答案是可行的,但我得到的响应是结构类型的,我想将其存储在阵列中的配置单元表中…这会导致类型不匹配…有解决方案吗???