더북(TheBook)

책의 깃허브 저장소를 복제했다면 first-edition/ch04 디렉터리에서 ch04_data_transactions.txt 파일1을 찾을 수 있다(책의 깃허브 저장소를 복제하지 않았다면 https://github.com/spark-in-action/first-edition/tree/master/ch04에서 해당 파일을 내려받을 수 있다).

예제 파일의 각 줄에는 구매 날짜, 시간, 고객 ID, 상품 ID, 구매 수량, 구매 금액이 순서대로 기록되어 있으며 각 항목은 해시 기호(#)로 구분된다. 이제 다음 코드를 실행해 예제 파일의 구매 로그들을 Pair RDD로 변환하자. 이 Pair RDD의 키는 고객 ID이며, 값에는 각 구매 로그(예제 파일의 각 줄)의 모든 정보가 저장된다.

scala> val tranFile = sc.textFile("first-edition/ch04/"+"ch04_data_transactions.txt") ----  데이터를 로드한다.
scala> val tranData = tranFile.map(_.split("#")) ----  데이터를 파싱한다.
scala> var transByCust = tranData.map(tran => (tran(2).toInt, tran)) ----  Pair RDD를 생성한다.

 

코드를 실행하면 tranFile에는 파일의 줄이 포함되며, tranData에는 해시 문자로 파싱한 데이터가 문자열 배열 형태로 저장된다. 마지막 에서는 파싱한 데이터(tran)를 튜플로 매핑해 transByCust Pair RDD를 만든다. tran 배열에서 고객 ID는 세 번째(인덱스 2번)에 위치하므로 이 값을 정수형으로 변환해 튜플의 첫 번째 요소로 지정했다. 튜플의 두 번째 요소에는 tran 배열 자체를 저장했다. transByCust를 값(val)이 아닌 변수(var)로 선언했기 때문에 기존의 구매 기록과 사은품들을 단일 변수에 계속 유지하면서 갱신할 수 있다.2

 

1 이 파일은 Mockaroo 웹 사이트(https://www.mockaroo.com)의 데이터로 생성했다.

 

2 역주 transByCust 변수를 줄곧 갱신하며 재사용하지만 RDD는 불변하는 성질이 있으므로 데이터 자체는 계속 새로 생성된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.