Momentan arbeite ich in Pig und ich versuche zu überprüfen, ob ein Feldwert (der ein chararray
ist) in einem anderen Feld (auch ein chararray
) vorhanden ist. Hier ist ein Beispiel.Apache Pig - Teilstring in anderen String
Datei t.txt
:
1;This is a banana which is yellow.;Fruit;Banana
2;This is not about fruit but about Apple Inc.;Company;Apple
In den obigen Beispielen, würde ich prüfen möchte, ob das letzte Feld (das heißt Banana
und Apple
) in dem zweiten Bereich (der Satz). Hier ist mein Schwein Skript so weit:
a = LOAD 't.txt' using PigStorage(';') AS (id:chararray, sentence:chararray, kind:chararray, search:chararray);
b = FOREACH a GENERATE id, LOWER(sentence) as sent:chararray, kind, LOWER(search) as srch:chararray;
c = FILTER b BY sent MATCHES '.* srch .*';
Das Ziel, das ich bin versucht zu erreichen, um die Bigramme zu erhalten das Suchwort umgeben. Um ein konkretes Beispiel zu geben, das ist, was ich suche (oder in einer anderen Form):
(1,Fruit,{(a, banana),(banana, which})
(2,Company,{(about, apple),(apple, inc.})
Also, meine Frage ist: Wie kann ich die Feldsuche aus dem Schema verwenden, um von dem Feld Satz Übereinstimmen das Schema?
Sie wollen also einen Satz aus t.txt, der mit art übereinstimmt und nach dem zweiten Schema sucht? So suchen Sie nach einem Satz mit allen Wörtern oder nur einem Wort aus einem der Tupel aus der Liste. –
Um ein Beispiel zu geben: Ich möchte aus jeder Zeile einen Wert (im Feld "Suche" enthalten) aus einem Satz (im Feld "Satz" enthalten) extrahieren. Es ist sehr ähnlich der Situation, in der Sie MATCHES verwenden, aber mit einem bestimmten Muster. Als Muster möchte ich hier jedoch den im Feld "Suchen" enthaltenen Wert anstelle eines gegebenen Musters verwenden. Das Muster ist also dynamisch und ändert sich für jede Zeile. –