【问题标题】:How to convert fields to rows in Pig?如何在 Pig 中将字段转换为行?
【发布时间】:2012-07-11 07:43:54
【问题描述】:

我想在 Pig 中将字段转换为行。

来自 input.txt

1 2 3 4 5 6 7 8 9

字段之间的分隔符是'\t'。

输出.txt

1 2 3 4 ... 但我不能使用 TOKENIZER,因为字段的内容可能是一个句子。 请帮我。 非常感谢。

【问题讨论】:

    标签: tokenize apache-pig


    【解决方案1】:

    我认为alexeipab 的回答是正确的方向。这是一个简单的例子:

    > 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)
    

    【讨论】:

      【解决方案2】:

      我在使用 Pig 时遇到了非常相似的问题。我最终做的是编写一个 UDF,它会简单地遍历元组。对于元组中的每个字段,它将使用字段值创建一个新元组并将其添加到数据包中。这是一个示例...

      public DataBag exec(Tuple tuple) throws IOException {
          DataBag db = BagFactory.getInstance().newDefaultBag();
          for(int i = 0; i < tuple.size(); ++i){
              DefaultTuple dt = new DefaultTuple();
              dt.append(tuple.get(i));
              db.add(dt);
          }
          return db;
      }
      

      显然这不包括任何错误检查,因为它是一个示例,但它会帮助您了解如何执行此操作。

      在您的脚本中,如果需要,您可以“展平”结果并将单个值放回单个元组中。

      【讨论】:

        【解决方案3】:

        您似乎想要旋转该行。有几个解决方案见Pivot table with Apache PigSplitting a tuple into multiple tuples in Pig

        【讨论】:

          【解决方案4】:

          使用 DataFu UDF TransposeTupleToBag (http://datafu.incubator.apache.org/docs/datafu/1.1.0/datafu/pig/util/TransposeTupleToBag.html) 来获取一个包含 tuple 转置字段的包。展平包以获取具有 (key:chararray, value:chararray) 元组的行。从展平输出中选择“值”部分。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-12-03
            • 1970-01-01
            • 1970-01-01
            • 2023-03-06
            • 1970-01-01
            • 2016-01-13
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多