Entfernen Sie zuerst die doppelten Wörter aus jeder Zeile und führen Sie dann die Wortzahl aus.
Pig Schritte:
REGISTER 'udf-1.0-SNAPSHOT.jar'
define tuple_set com.ts.pig.UniqueRecords();
data = load '<file>' using PigStorage();
entfernen doppelte Wörter aus jeder Zeile
unique= foreach data generate tuple_set($0) as line;
words= foreach unique generate flatten(TOKENIZE(line,' ')) as word;
grouped = group words BY word;
count= foreach grouped GENERATE group, COUNT(words);
dump count;
Pig UDF Beispielcode:
/**
* This udf removes duplicate words from line
*/
public class UniqueRecords extends EvalFunc<String> {
@Override
public String exec(Tuple tuple) throws IOException {
if (tuple == null || tuple.size() == 0)
return null;
String[] splits=tuple.get(0).toString().split(" ");
Set<String> elements = new HashSet<String>(Arrays.asList(splits));
StringBuilder sb = new StringBuilder();
for(String element:elements){
sb.append(element+" ");
}
return sb.toString();
}
}
Ist die Anzahl der Zielwörter fixiert I; Eine ähnliche Frage beantwortet http://stackoverflow.com/questions/39962608/pig-lati n-word-count –
Ja, die gleiche Frage, die Anzahl der Wörter ist vielleicht ein verwirrender Name ... was ist, wenn die Anzahl der Zielwörter ziemlich groß ist? – HM9527
Sie können diese Wörter entweder in einer anderen Relation speichern, die Eingabe mit der Relation verbinden, Ihr Schweineschrift- stück zähmen oder parametrisieren und das Suchwort aus einem Stapelskript in einer Schleife übergeben und die Ergebnisse abrufen. –