23강

ratings = LOAD '/user/maria_dev/ml-100k/u.data' AS (userID:int, movieID:int, rating:int, ratingTime:int);

AS 절은 스키마를 부여함

Pig와 RDB의 차이점은 Data를 불러올 때, 스키마가 적용되는지의 차이. 원래는 연관된 구조나 스키마가 따로 없는데, 이것처럼, 텍스트 파일을 불러서 ‘AS’ 절을 이용해 각 필드에 이름과 type을 부여할 수 있음.

MapReduce였다면 Mapper 작업이 일어났을 것임

영화의 ID는 찾았지만 영화 제목을 모르니 이걸 파악하깅 위해 u.item 파일을 불러옴

metadata = LOAD '/user/maria_dev/ml-100k/u.item' USING PigStorage('|')AS (movieID: int, movieTitle:chararray, releaseDate:chararray, videoRelease:chararray, imdbLink:chararray);
DUMP metadata;

이제 이 정보를 이용할 수 있게 변환해야 함 → 개봉일을 기준으로 정렬하려고 하는데, 개봉일을 정렬이 가능한 형태로 바꿔야 할 것임 → 다음 작업은 그것을 위한 것

nameLookup = FOREACH metadata GENERATE movieID, movieTitle, ToUnixTime(ToDate(releaseDate, 'dd-MMM-yyyy')) AS releaseTime;

Pig는 Bag이라는 걸 만들어서 {} 거기에 dump 함

ratingsByMovie = GROUP ratings BY movieID;
DUMP ratingsByMovie;
avgRatings = FOREACH ratingsByMovie GENERATE group AS movieID, AVG(ratings.rating) AS avgRating;
fiveStarMovies = FILTER avgRatings BY avgRating > 4.0;

fiveStarsWithData = JOIN fiveStarMovies BY movieID, nameLookup BY movieID;
// 두 녀석의 movieID를 보면서 JOIN하는 절차

개봉일 순으로 정렬

oldestFiveStarMovies = ORDER fiveStarsWithData BY nameLookup::releaseTime;

25강.