더북(TheBook)

6.1.4.2 거래 주문 건수 집계

다음으로 해야 할 일은 초당 거래 주문 건수를 집계하는 것이다. 이 작업은 PairDStreamFunctions 객체로 구현할 수 있다. 4장에서 설명했듯이 2-요소 튜플로 구성된 RDD는 PairRDDFunctions 인스턴스로 암시적 변환된다. 2-요소 튜플로 구성된 DStream 또한 PairDStreamFunctions 객체로 자동 변환된다. PairDStreamFunctions로 변환된 DStream 객체는 4장에서 살펴본 combineByKey, reduceByKey, flatMapValues 및 여러 조인 함수를 포함한 변환 함수들을 제공한다.

예를 들어 주문 유형(매수 또는 매도)별로 주문 건수를 집계하려면 키와 값이 각각 주문 유형과 출현 횟수인 튜플을 사용해 orders DStream 요소를 매핑한 후, reduceByKey를 호출해 각 유형의 출현 횟수를 모두 더해야 한다(PairDStreamFunctions에는 countByKey 함수가 없다). 예를 들어 다음과 같이 구현할 수 있다.

scala> val numPerType = orders.map(o => (o.buy, 1L)).reduceByKey((c1, c2) => c1 + c2)

 

이 코드는 4.2.2절에서 소개한 reduceByKey 예제와 많이 닮았다. 여기서 사용한 reduceByKey는 튜플의 모든 값을 1로 초기화하고, 동일 키의 값을 단순히 더했다. 따라서 numPerType DStream의 각 RDD에는 (Boolean, Long) 튜플이 최대 두 개 저장된다. 하나는 매수 주문(true)의 건수고, 나머지 하나는 매도 주문(false)의 건수다.

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