Pig 字段中的拆分字符
Split characters inside Pig field
我有一个带有“|”的文本输入分隔符为
0.0000|25000| |BM|BM901002500109999998|SZ
我使用 PigStorage 进行拆分
A = LOAD '/user/hue/data.txt' using PigStorage('|');
现在我需要根据位置将字段 BM901002500109999998 拆分为不同的字段,比如 0-2 = BM - Field1 等等。
所以在这一步之后我应该得到 BM, 90100, 2500, 10, 9999998。
Pig脚本有什么办法可以实现吗,不然我打算写一个UDF,把分隔符放在需要的位置。
谢谢。
您正在寻找SUBSTRING
:
A = LOAD '/user/hue/data.txt' using PigStorage('|');
B = FOREACH A GENERATE SUBSTRING(,0,2) AS FIELD_1, SUBSTRING(,2,7) AS FIELD_2, SUBSTRING(,7,11) AS FIELD_3, SUBSTRING(,11,13) AS FIELD_4, SUBSTRING(,13,20) AS FIELD_5;
输出将是:
dump B;
(BM,90100,2500,10,9999998)
您可以找到有关此功能的更多信息here.
我认为使用内置的 UDF 会更有效率 REGEX_EXTRACT_ALL.
您可以从以下位置了解如何使用此 UDF:
- http://pig.apache.org/docs/r0.8.1/piglatin_ref2.html#REGEX_EXTRACT_ALL
- STRSPLIT and REGEX_EXTRACT_ALL in PigLatin
我有一个带有“|”的文本输入分隔符为
0.0000|25000| |BM|BM901002500109999998|SZ
我使用 PigStorage 进行拆分
A = LOAD '/user/hue/data.txt' using PigStorage('|');
现在我需要根据位置将字段 BM901002500109999998 拆分为不同的字段,比如 0-2 = BM - Field1 等等。 所以在这一步之后我应该得到 BM, 90100, 2500, 10, 9999998。 Pig脚本有什么办法可以实现吗,不然我打算写一个UDF,把分隔符放在需要的位置。
谢谢。
您正在寻找SUBSTRING
:
A = LOAD '/user/hue/data.txt' using PigStorage('|');
B = FOREACH A GENERATE SUBSTRING(,0,2) AS FIELD_1, SUBSTRING(,2,7) AS FIELD_2, SUBSTRING(,7,11) AS FIELD_3, SUBSTRING(,11,13) AS FIELD_4, SUBSTRING(,13,20) AS FIELD_5;
输出将是:
dump B;
(BM,90100,2500,10,9999998)
您可以找到有关此功能的更多信息here.
我认为使用内置的 UDF 会更有效率 REGEX_EXTRACT_ALL.
您可以从以下位置了解如何使用此 UDF:
- http://pig.apache.org/docs/r0.8.1/piglatin_ref2.html#REGEX_EXTRACT_ALL
- STRSPLIT and REGEX_EXTRACT_ALL in PigLatin