더북(TheBook)

4.3.1 데이터 조인

 

자, 우선 어제 판매한 상품 이름과 각 상품별 매출액 합계부터 뽑아 보자(목록을 정렬하는 작업은 일단 제쳐 두자). 우리는 지난 4.1절에서 전일 구매 기록이 담긴 예제 파일을 tranDataRDD에 로드했다. (스파크 셸을 닫았다면 4.1.2절로 되돌아가서 데이터 파일을 다시 로드하고 tranData RDD와 transByCustRDD를 만들자. 그러나 모든 실습 코드를 다시 실행할 필요는 없다.) 우선 이 RDD를 다음과 같이 매핑해 상품 ID를 키로 설정한 PairRDD를 생성하자.

val transByProd = tranData.map(tran => (tran(3).toInt, tran))

 

그런 다음 reduceByKey 변환 연산자를 사용해 각 상품의 매출액 합계를 계산하자.

val totalsByProd = transByProd.mapValues(t => t(5).toDouble).
   reduceByKey{case(tot1, tot2) => tot1 + tot2}

 

상품 이름 정보는 별도 파일에 저장되어 있다(책의 깃허브 저장소에서 ch04_data_products.txt 파일을 찾을 수 있다). 어제 판매한 상품 이름을 알아내려면 이 파일과 전일 구매 기록을 조인해야 한다. 먼저 상품 이름 파일을 로드하고 Pair RDD로 변환하자.

scala> val products = sc.textFile("first-edition/ch04/ch04_data_products.txt").
    map(line => line.split("#")).
    map(p => (p(0).toInt, p))
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.