PIG TRIM和UPPER

时间:2015-11-11 17:35:07

标签: hadoop apache-pig trim uppercase udf

我是Hadoop编程的新手,正在寻找猪的帮助。我的数据来自simple.txt格式为,分隔符。我有两个用例。我想对所有列进行ltrim(rtrim()),并针对所选字段转到UPPER

这是我的剧本:

party = Load '/party_test_pig.txt' USING PigStorage(',') AS(....);
Trim_party = FOREACH Upper_party GENERATE TRIM(*);
Upper_party = FOREACH party GENERATE UPPER(col1), UPPER(col2), UPPER(col3);

Upper_party:在将其设为大写之后,我想查看所有列,而不仅仅是查看更改为大写的列。

Trim_party:进行了一些研究并发现,为了修剪所有列,我将不得不编写UDF。我可以做Trim_party = FOREACH Upper_party GENERATE TRIM(col1)...TRIM(coln);但我觉得这不是一种有效的方式和耗时。

还有其他方法,我可以让这个脚本无需为Trim编写UDF吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您提供数据样本,它会更容易。根据我的理解,我会这样做:

-- Load each line as one string with TextLoader
A = LOAD '/user/guest/Pig/20151112.PigTest.txt' USING TextLoader() AS (line:CHARARRAY);
-- Apply TRIM and UPPER transformation, it will keep spaces that are inside your strings
B = FOREACH A GENERATE UPPER(line) AS lineUP;
-- Split lines with your delimiter
C = FOREACH B GENERATE FLATTEN(STRSPLIT(lineUP, ',')) AS (col1:CHARARRAY, ... ,coln:CHARARRAY);
-- Select the columns you need
D = FOREACH C GENERATE TRIM(col1) AS col1T, ..., TRIM(coln) AS colnT;