在 Pig 字段中拆分字符

Posted

技术标签:

【中文标题】在 Pig 字段中拆分字符【英文标题】:Split characters inside Pig field 【发布时间】:2015-05-19 15:38:34 【问题描述】:

我有一个带有“|”的文本输入分隔符为

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并将分隔符放在所需的位置。

谢谢。

【问题讨论】:

您在寻找子字符串吗? pig.apache.org/docs/r0.8.1/api/org/apache/pig/builtin/… 【参考方案1】:

你在找SUBSTRING:

A = LOAD '/user/hue/data.txt' using PigStorage('|');
B = FOREACH A GENERATE SUBSTRING($4,0,2) AS FIELD_1, SUBSTRING($4,2,7) AS FIELD_2, SUBSTRING($4,7,11) AS FIELD_3, SUBSTRING($4,11,13) AS FIELD_4, SUBSTRING($4,13,20) AS FIELD_5;

输出将是:

dump B;
(BM,90100,2500,10,9999998)

您可以找到有关此功能的更多信息here.

【讨论】:

感谢 Balduz,这正是我想要的。【参考方案2】:

我认为使用内置 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

【讨论】:

以上是关于在 Pig 字段中拆分字符的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中拆分点上的字符串并从中提取所有字段?

加载值字段包含逗号和特殊字符的 csv 文件时,Hadoop Pig“加载”问题

在字段中拆分字符串并用作 sql 中的新列名

如何在shell中拆分字符串并获取最后一个字段

在 Pig 中过滤

MySQL数据库,字符串字段拆分