【问题标题】:PIG TRIM and UPPERPIG TRIM 和 UPPER
【发布时间】:2015-11-11 17:35:07
【问题描述】:

我是 Hadoop 编程的新手,在 pig 中寻求帮助。我有来自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 的情况下使这个脚本工作?

提前致谢。

【问题讨论】:

    标签: hadoop apache-pig trim uppercase udf


    【解决方案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;
    

    【讨论】:

    • 嗨@AntonyBrd 谢谢你的回答。鞋面工作正常。但是 Trim 不起作用。
    • 我什至跑了B = FOREACH A GENERATE TRIM(line) AS lineTRIM; 只是为了验证它是否有效,但在这里也失败了。
    • 记录 1:101,2015-11-11,201, hola ,Shah,Rukh,Khan, Shahrukh Khan ,SRK,Mr,Male,Married,Hindi,2065,1965-11-02,2065-11-02,1992-11-02,2065-11-02,100 记录 2:102,2015-11-12,202, hi ,Kajol,Tanuja,Mukerjee, Kajol Devgan ,KD,Mrs,Female,Married,Hindi,2066,196-11-03,2065-11-03,1992-11-03,2065-11-03,101
    • 它因错误而失败或未能达到您的预期?如果是这样,你期望什么?
    • 它没有达到我的预期......所以我的输入是##Shahrukh Khan##。考虑 ## 作为我想在最终输出中修剪的空间。预期的输出是 Shahrukh Khan(应该删除左右空格)。
    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多