0

Pig を使用してデータを処理しています。

私のデータは次のようになります:

<?xml version="1.0" encoding="UTF-8"?><MC><SC><S uid="1" gen="" art="Samsung" cmp="&lt;unknown&gt;" fld="/mnt/sdcard/Samsung/Music" alb="Samsung" ttl="Vacation"/><S uid="2" gen="" art="Samsung" cmp="&lt;unknown&gt;" fld="/mnt/sdcard/Samsung/Music" alb="Samsung" ttl="Mother earth"/><S uid="3" gen="" art="Samsung" cmp="&lt;unknown&gt;" fld="/mnt/sdcard/Samsung/Music" alb="Samsung" ttl="Over the horizon"/><S uid="4" gen="" art="Samsung" cmp="&lt;unknown&gt;" fld="/mnt/sdcard/Samsung/Music" alb="Samsung" ttl="Vocalise"/><S uid="5" gen="" art="Kitschi cupid" cmp="&lt;unknown&gt;" fld="/mnt/sdcard/Samsung/Music" alb="Samsung BeatDJ" ttl="Hard beat floor"/><S uid="6" gen="" yr="2011" art="David Kater" cmp="&lt;unknown&gt;" fld="/mnt/sdcard/Samsung/Music" alb="Samsung" ttl="Nothing left to say"/><S uid="7" gen="" art="Samsung" cmp="&lt;unknown&gt;" fld="/mnt/sdcard/Samsung/Music" alb="Samsung" ttl="Morning Dew"/><S uid="12" gen="" art="&lt;unknown&gt;" cmp="&lt;unknown&gt;" fld="/mnt/sdcard/download" alb="download" ttl="mirzaghalib6_www.songs.pk_"/><S uid="13" gen="" art="&lt;unknown&gt;" cmp="&lt;unknown&gt;" fld="/mnt/sdcard/download" alb="download" ttl="mirzaghalib7_www.songs.pk_"/><S uid="4555" gen="" yr="2012" art="Javed Ali &amp; Shakthisree Gopalan" cmp="Music: A.R. Rahman | Lyrics: Gulzar" fld="/mnt/sdcard/WhatsApp/Media/WhatsApp Audio" alb="Jab Tak Hai Jaan" ttl="Jab Tak Hai Jaan - www.Songs.PK"/></SC><PC/></MC>)

私の目標は、それを解析し、相互に依存して HDFS の art=" " にエントリを保存することです。

次のPIGコマンドを使用しました:

A= load 'smalltestdata' USING TextLoader() AS (line:chararray);
data_split=FILTER C BY (line matches '.*art=.*');

何か不足していますか?

4

1 に答える 1

1

art="前後の情報のみを取得するに"は、次の正規表現を使用します。

(?<=art\=")(.*?)(?=")

何が起こっているかは次のとおりです。

1. (?<=art\=") - This is a lookbehind.  It will look for matches after `art="`
2. (.*?)       - This is the search string that is returned.  The `?` makes it non-greedy, so it only grabs the least number of finds
3. (?=")       - This is a lookahead.  It will search for things before `"`

後読みと先読みは返されないため、結果は と の間のすべてのテキストにart="なり"ます。

于 2013-03-11T17:49:08.250 に答える