【问题标题】:Column to row transformation using Pig Latin使用 Pig Latin 进行列到行转换
【发布时间】:2016-05-02 19:18:13
【问题描述】:
A = load 'input.txt'; 
dump A;
"0,1, 2,3,4 
5, 6,7, 8,9
B = foreach A generate FLATTEN(TOBAG(*));
dump B
("0)
(1)
( 2)
(3)
(4)
(5)
( 6)
(7)
( 8)
(9)

我想对上面的每个字段执行一些替换和修剪操作。如何将其转换回原始格式发布?

预期输出

0,1,2,3,4

5,6,7,8,9

【问题讨论】:

    标签: hadoop apache-pig bigdata


    【解决方案1】:

    您可以使用正则表达式进行简单替换。由于 REPLACE 函数调用 java String.replaceAll() 您可以使用与 java 兼容的正则表达式。这是演示:

    grunt> A = load 'input.txt' as (f1:chararray);
    grunt> DUMP A;
    ("0,1, 2,3,4 )
    (5, 6,7, 8,9)
    grunt> B = foreach A generate FLATTEN(TOBAG(*));
    grunt> DUMP B;
    ("0,1, 2,3,4 )
    (5, 6,7, 8,9)
    grunt> X = FOREACH B GENERATE REPLACE($0, '[^0-9,]', '');
    grunt> DUMP X;
    (0,1,2,3,4)
    (5,6,7,8,9)
    grunt> Y = FOREACH X GENERATE FLATTEN(STRSPLIT($0, ','));
    grunt> DUMP Y;
    (0,1,2,3,4)
    (5,6,7,8,9)
    grunt> Z = FOREACH Y GENERATE $0;
    grunt> DUMP Z;
    (0)
    (5)
    

    【讨论】:

    • 很抱歉,您能否详细说明您的最后一行:“加载输入时不要忘记分配字段。” ? DUMP X 也会导致 BAG,我无法参考 Y= FOREACH X GENERATE $0?
    • @BigData 第一个问题:这并不重要,我删除了它——只确保这些行完全按原样复制。对于第二个问题:我更新了将 chararray 展平和拆分的答案,以便您可以引用关系 Z 中的第一列。
    • @BigData 解决了您的问题吗?确保接受其中一个答案。
    【解决方案2】:

    是的,这确实是一个实验性问题。

    行到列的转换和列到行的转换!!

    是的,通过从 RANK 运营商那里获得一点帮助,我认为我们可以做到这一点

    我为下面的输入尝试了下面的代码

    输入:

     0,1,2,3,4 
     5,6,7,8,9
    

    Below Pig 脚本中有两个转储语句

    numbers = LOAD '/home/inputfiles/col_to_row.txt' USING PigStorage() As(line:chararray);
    
    numbers_rank = RANK numbers;
    
    numbers_each = FOREACH numbers_rank GENERATE  $0 as rank_key,FLATTEN(TOKENIZE(line)) as each_number;
    
    rows_to_columns = FOREACH numbers_each GENERATE each_number;
    
    dump rows_to_columns;--Will give you each number in a separate row..
    
    
    numbers_grp = GROUP numbers_each BY rank_key;
    
    columns_to_rows = FOREACH numbers_grp GENERATE FLATTEN(BagToTuple(numbers_each.each_number));
    
    dump columns_to_rows; -- Will give you as Per original input data set
    

    输出:

       dump rows_to_columns;
    
             (0)
             (1)
             (2)
             (3)
             (4)
             (5)
             (6)
             (7)
             (8)
             (9)
    
    
       dump columns_to_rows;
    
             (0,1,2,3,4)
             (5,6,7,8,9)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-15
      • 2011-12-23
      相关资源
      最近更新 更多