我是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吗?
提前致谢。
答案 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;