首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PigLatin中的STRSPLIT和REGEX_EXTRACT_ALL

PigLatin中的STRSPLIT和REGEX_EXTRACT_ALL
EN

Stack Overflow用户
提问于 2012-11-15 19:39:11
回答 2查看 8.7K关注 0票数 2

我有一个文件:

代码语言:javascript
复制
File
----
12-3    John    121
 5-1    Sam     122

该文件以制表符(\t)分隔。我将行作为line:chararray加载,因为我希望数据不会被拆分成单独的字段。

现在,我想将详细信息(12-3和5-1)拉取并存储为单独的数据。

我正在尝试使用STRSPLITREGEX_EXTRACT_ALL,但数据似乎不匹配。

代码语言:javascript
复制
splitdata = FOREACH filedata {
    regex = REGEX_EXTRACT_ALL(line, '^([0-9]*)\\-([0-9]*)');
    split = STRSPLIT(line, '\\t', 1);
    GENERATE regex, split;
};

我希望我的最终数据是这样的:

代码语言:javascript
复制
(12, 3, 12-3    John    121)
( 5, 1,  5-1    Sam     122)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-15 21:59:25

谢谢你,洛兰。

既然您给出了一点关于如何使用REGEX_EXTRACT_ALL的概念,下面就是我最终是如何使用它的。

代码语言:javascript
复制
FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, '^([0-9]*)\\-([0-9]*).*')) 
  AS (FIELD1:chararray, FIELD2:chararray), line;

非常有趣的是,Matcher.matches()对于'^([0-9]*)\\-([0-9]*)'是失败的,而对于'^([0-9]*)\\-([0-9]*).*'是有效的。

票数 4
EN

Stack Overflow用户

发布于 2012-11-15 21:32:42

下面是什么:

代码语言:javascript
复制
A = LOAD .... AS (line:chararray);
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, '^(.*)\t(.*)\t(.*)$')) 
      AS (id:chararray, name:chararray, nameid:chararray);
C = FOREACH B GENERATE FLATTEN(REGEX_EXTRACT_ALL(id, '^([0-9]*)\\-([0-9]*)')), 
      id, name, nameid;
STORE C INTO ...

如果在加载时将行\t拆分为字段,则可以跳过B = ...

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13396778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档