4장. Spark 감소
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
이 장에서는 Spark에서 RDD의 축소 변환에 중점을 둡니다. 특히, Spark의 많은 작업에 필요한 일반적인 데이터 추상화인 (키, 값) 쌍의 RDD로 작업할 것입니다. 데이터를 (키, 값) 형태로 가져오기 위해 일부 초기 ETL 작업이 필요할 수 있지만, 쌍 RDD를 사용하면 값 집합에 대해 원하는 모든 집계를 수행할 수 있습니다.
Spark는 몇 가지 강력한 축소 변환과 작업을 지원합니다. 가장 중요한 축소 변환은 다음과 같습니다:
-
reduceByKey() -
combineByKey() -
groupByKey() -
aggregateByKey()
모든 *ByKey() 변환은 소스RDD[(K, V)] 를 받아 대상RDD[(K, C)] 을 생성합니다( reduceByKey(), V 및 C와 같은 일부 변환의 경우 동일). 이러한 변환의 기능은 예를 들어 주어진 키의 모든 값(모든 고유 키에 대해)을 찾아서 줄이는 것입니다:
-
모든 값의 평균
-
모든 값의 합계 및 개수
-
모든 값의 모드와 중앙값
-
모든 값의 표준 편차
감소 변환 선택
매퍼 변환과 마찬가지로, 작업에 적합한 도구를 선택하는 것이 중요합니다. 중앙값 찾기와 같은 일부 축소 작업의 경우, 축소기는 모든 값에 동시에 액세스할 수 있어야 합니다. 하지만 모든 값의 합계나 개수를 찾는 것과 같은 다른 작업의 경우에는 그렇지 않습니다. 키별 값의 중앙값을 찾으려면 groupByKey()을 사용하는 것이 좋지만, 키에 값이 많은 경우 이 변환은 잘 작동하지 않습니다(OOM 문제가 발생할 수 있음). 반면에 모든 값의 합계 또는 개수를 찾으려면 reduceByKey() 이 좋은 선택이 될 수 있습니다. 이 함수는 연관 및 정류 감소 함수를 사용하여 각 키의 값을 병합합니다.
이 장에서는 간단한 PySpark 예제를 통해 가장 중요한 Spark 감소 변환을 사용하는 방법을 보여드리겠습니다. Spark 애플리케이션에서 가장 일반적으로 사용되는 변환에 초점을 맞출 것입니다. 또한 환원의 일반적인 개념과 효율적인 환원 알고리즘을 위한 설계 원리인 모노이드에 대해서도 설명합니다. 먼저 Spark의 환원 변환에 필요한 쌍 RDD를 만드는 방법부터 살펴보겠습니다.
쌍 RDD 생성
키 집합과 관련 값이 주어지면 환원 변환은 알고리즘(값의 합, 값의 중앙값 등)을 사용하여 각 키의 값을 줄입니다. 따라서 이 장에서 소개하는 환원 변환은 (키, 값) 쌍에 대해 작동하므로 RDD 요소는 이 형식을 준수해야 합니다. Spark에서 쌍 RDD를 만드는 방법에는 여러 가지가 있습니다. 예를 들어, 여기에 표시된 것처럼 컬렉션(예: 튜플 및 사전 목록)에parallelize() 을 사용할 수도 있습니다:
>>>key_value=[(