Apache-pig-tokenize

提供:Dev Guides
移動先:案内検索

Apache Pig-トークン化()

Pig Latinの* TOKENIZE()*関数は、単一のタプル内の文字列(単語のグループを含む)を分割するために使用され、分割操作の出力を含むバッグを返します。

構文

以下に、* TOKENIZE()*関数の構文を示します。

grunt> TOKENIZE(expression [, 'field_delimiter'])
  • TOKENIZE()関数のデリミタとして、スペース[]、二重引用符[""]、コマ[、]、括弧[()]、星[]を渡すことができます。

以下に示すように、HDFSディレクトリ /pig_data/student_details.txt という名前のファイルがあると仮定します。 このファイルには、ID、名前、年齢、市などの学生の詳細が含まれています。 注意深く観察すると、学生の名前にはスペースで区切られた姓と名が含まれます[]。

*student_details.txt*
001,Rajiv Reddy,21,Hyderabad
002,siddarth Battacharya,22,Kolkata
003,Rajesh Khanna,22,Delhi
004,Preethi Agarwal,21,Pune
005,Trupthi Mohanthy,23,Bhuwaneshwar
006,Archana Mishra,23 ,Chennai
007,Komal Nayak,24,trivendram
008,Bharathi Nambiayar,24,Chennai

以下に示すように、このファイルをリレーション名 student_details でPigにロードしました。

grunt> student_details = LOAD 'hdfs://localhost:9000/pig_data/student_details.txt' USING PigStorage(',')
   as (id:int, name:chararray, age:int,  city:chararray);

文字列のトークン化

  • TOKENIZE()*関数を使用して文字列を分割できます。 例として、次のようにこの関数を使用して名前を分割します。
grunt> student_name_tokenize = foreach student_details  Generate TOKENIZE(name);

検証

以下に示すように、 DUMP 演算子を使用して、リレーション student_name_tokenize を確認します。

grunt> Dump student_name_tokenize;

出力

次の出力が生成され、リレーション student_name_tokenize の内容が次のように表示されます。

({(Rajaiv),(Reddy)})
({(siddarth),(Battacharya)})
({(Rajesh),(Khanna)})
({(Preethi),(Agarwal)})
({(Trupthi),(Mohanthy)})
({(Archana),(Mishra)})
({(Komal),(Nayak)})
({(Bharathi),(Nambiayar)})

その他のデリメータ

同様に、スペース[]を含むTOKENIZE()関数は、二重引用符[""]、コマ[、]、括弧[()]、星[*]を区切り文字として受け入れます。

id、name、age、cityなどの学生の詳細を含む details.txt という名前のファイルがあるとします。 名前列の下に、このファイルには、以下に示すように、さまざまな区切り文字で区切られた生徒の名と姓が含まれています。

*details.txt*
001,"siddarth""Battacharya",22,Kolkata
002,Rajesh*Khanna,22,Delhi
003,(Preethi)(Agarwal),21,Pune

以下に示すように、このファイルをリレーション名 details でPigにロードしました。

grunt> details = LOAD 'hdfs://localhost:9000/pig_data/details.txt' USING PigStorage(',')
   as (id:int, name:chararray, age:int,  city:chararray);

次に、次のようにTOKENIZE()を使用して、学生の名と姓を区別してみます。

grunt> tokenize_data = foreach details Generate TOKENIZE(name);

ダンプ演算子を使用して tokenize_data 関係を検証すると、次の結果が得られます。

grunt> Dump tokenize_data;

({(siddarth),(Battacharya)})
({(Rajesh),(Khanna)})
({(Preethi),(Agarwal)})