3

私はPigLatinの初心者であり、(基本的な)助けが必要です。

私のデータは次のようにDESCRIBEです:

xmlToTuple: {(node_attr_id: int,tag: {(tag_attr_k: chararray,tag_attr_v: chararray)})}

そしてこのようにダンプ:

((704398904,{(lat,-13.00583333),(lon,45.24166667)}))
((1230941976,{(place,village)}))
((1230941977,{(name,Mtsahara)}))
((1751057677,{(amenity,fast_food),(name,Brochetterie)}))
((100948360,{(amenity,ferry_terminal)}))
((362795028,{(amenity,fuel),(operator,Total)}))

tag_attr_kフィールドに特定の値を持つレコードを抽出したいと思います。たとえば、tag_attr_k = amesity?があるレコードを教えてください。それは:

((1751057677,{(amenity,fast_food),(name,Brochetterie)}))
((100948360,{(amenity,ferry_terminal)}))
((362795028,{(amenity,fuel),(operator,Total)}))

誰でも私にそうするように説明できますか?少し迷っています…</p>

4

3 に答える 3

3

タプルのバッグの代わりにマップを使用する必要があります。キーはあなたtag_attr_kのものになり、あなたの価値観はあなたのものになりますtag_attr_v。したがって、データの1行は、たとえば、

(1751057677,['amenity'#'fast_food', 'name',#'Brochetterie'])

次に、キーにアクセスして値がであるかどうかを確認することにより、キーが存在するかどうかを確認できますNULL

FILTER xml BY tag_attr#'amenity' IS NOT NULL;

于 2013-01-22T18:17:39.180 に答える
2

見つけた!

 XmlTag = FOREACH xmlToTuple GENERATE FLATTEN ($0);
    XmlTag2 = FOREACH XmlTag {
        tag_with_amenity = FILTER tag BY (tag_attr_k == 'amenity');
        GENERATE *, COUNT(tag_with_amenity) AS count;
    };
    XmlTag3 = FOREACH (FILTER XmlTag2 BY count > 0) GENERATE node_attr_id, node_attr_lon, node_attr_lat, tag;
于 2013-02-12T15:11:16.500 に答える
1

mapこれには、タプルのリストではなく、を使用する必要があります。マップはまさにこの目的のために作成されています。http://pig.apache.org/docs/r0.10.0/basic.html#data-types

フィルターで除外するには、次のようにします。

B = FILTER A BY mymap#'amenity' IS NOT NULL;
于 2013-01-22T18:06:40.027 に答える