4

Pig でフィールドを行に変換したい。

input.txt から

1 2 3 4 5 6 7 8 9

フィールド間の区切りは '\t' です。

output.txtに

1 2 3 4 ... しかし、フィールドの内容が文である可能性があるため、TOKENIZER を使用してはなりません。私を助けてください。どうもありがとう。

4

4 に答える 4

5

アレクセイパブの答えは正しい方向だと思います。簡単な例を次に示します。

> 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)
于 2012-07-28T01:45:03.723 に答える
4

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;
}

明らかに、これはサンプルであるためエラーチェックは含まれていませんが、これを行う方法を理解するのに役立ちます。

スクリプトでは、結果を「フラット化」し、必要に応じて単一の値を個々のタプルに戻すことができます。

于 2012-07-13T13:31:46.380 に答える
0

DataFu UDF TransposeTupleToBag ( http://datafu.incubator.apache.org/docs/datafu/1.1.0/datafu/pig/util/TransposeTupleToBag.html ) を使用して、転置されたタプルからのフィールドを含むバッグを取得します。(key:chararray, value:chararray) タプルで行を取得するには、バッグをフラット化します。フラット化された出力から「値」部分を選択します。

于 2014-05-15T09:13:31.600 に答える
0

行をピボットしたいようです。Apache Pig を使用したピボット テーブルまたはPigでタプルを複数のタプルに分割する方法を参照してください。

于 2012-07-11T17:21:17.287 に答える