Ich habe eine Liste von Filmen mit Bewertungen von Benutzer.Hadoop PIG mit verschachtelten JSON
{"_id":59607,"title":"King Corn (2007)",
"genres":["Documentary"],
"ratings":[ {"userId":1860,"rating":3},
{"userId":9970,"rating":3.5},
{"userId":16929,"rating":1.5},
{"userId":23473,"rating":4},
{"userId":23733,"rating":4},
{"userId":27584,"rating":3},
{"userId":28232,"rating":4},
{"userId":29482,"rating":3},
{"userId":40976,"rating":5},
{"userId":44631,"rating":4},
{"userId":47613,"rating":3},
{"userId":49763,"rating":3},
{"userId":58160,"rating":4.5},
{"userId":62249,"rating":3},
{"userId":65923,"rating":4},
{"userId":67507,"rating":4},
{"userId":68259,"rating":3.5},
{"userId":70331,"rating":5},
{"userId":71420,"rating":3.5}
]
}
Ich muss zählen, wie viele Bewertungen von jedem Benutzer vorgenommen werden. Dies ist mein Versuch, die Bewertungen zu bekommen.
a = load '/movies_1m.json' using JsonLoader('id:int, title : chararray, genres : { (genre : chararray) }, ratings: { (userId : int, rating: float) } ');
dann
b = FOREACH a GENERATE FLATTEN(ratings);
beschreiben mir geben folgende:
b: {ratings::userId: int,ratings::rating: float}
nur die Benutzer ich das Innere der Bewertungen zugreifen müssen zählen. Aber das ist der Punkt, wo es nicht gelingt. Ich habe das versucht:
c = FOREACH b GENERATE COUNT(ratings);
es wird mir ein Fehler.
Ich brauche so etwas zu bekommen:
{userId: int, rating: float}