고급 Spark 프로그래밍
Spark에는 두 가지 유형의 공유 변수가 있습니다. broadcast variables 두 번째는 accumulators.
Broadcast variables − 큰 값을 효율적으로 배포하는 데 사용됩니다.
Accumulators − 특정 수집 정보를 집계하는 데 사용됩니다.
방송 변수
브로드 캐스트 변수를 사용하면 프로그래머가 작업과 함께 복사본을 제공하지 않고 각 시스템에 캐시 된 읽기 전용 변수를 유지할 수 있습니다. 예를 들어 모든 노드에 대규모 입력 데이터 세트의 사본을 효율적인 방식으로 제공하는 데 사용할 수 있습니다. Spark는 또한 통신 비용을 줄이기 위해 효율적인 방송 알고리즘을 사용하여 방송 변수를 배포하려고합니다.
Spark 작업은 분산 된 "셔플"작업으로 구분 된 일련의 단계를 통해 실행됩니다. Spark는 각 단계 내의 작업에 필요한 공통 데이터를 자동으로 브로드 캐스트합니다.
이러한 방식으로 브로드 캐스트 된 데이터는 직렬화 된 형식으로 캐시되고 각 작업을 실행하기 전에 역 직렬화됩니다. 즉, 명시 적으로 브로드 캐스트 변수를 만드는 것은 여러 단계의 작업에 동일한 데이터가 필요하거나 역 직렬화 된 형식의 데이터 캐싱이 중요한 경우에만 유용합니다.
방송 변수는 변수에서 생성됩니다. v 전화로 SparkContext.broadcast(v). 브로드 캐스트 변수는v, 그 값은 value방법. 아래에 주어진 코드는 이것을 보여줍니다-
scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
Output −
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)
브로드 캐스트 변수가 생성 된 후에는 값 대신 사용해야합니다. v 클러스터에서 실행되는 모든 기능에서 v노드에 두 번 이상 제공되지 않습니다. 또한 개체v 모든 노드가 브로드 캐스트 변수의 동일한 값을 갖도록하기 위해 브로드 캐스트 후에 수정해서는 안됩니다.
어큐뮬레이터
누산기는 연관 연산을 통해서만 "추가"되는 변수이므로 병렬로 효율적으로 지원할 수 있습니다. 카운터 (MapReduce에서와 같이) 또는 합계를 구현하는 데 사용할 수 있습니다. Spark는 기본적으로 숫자 유형의 누산기를 지원하며 프로그래머는 새로운 유형에 대한 지원을 추가 할 수 있습니다. 누산기가 이름으로 생성되면 다음 위치에 표시됩니다.Spark’s UI. 이것은 실행 단계의 진행 상황을 이해하는 데 유용 할 수 있습니다 (참고-Python에서는 아직 지원되지 않음).
누산기는 초기 값에서 생성됩니다. v 전화로 SparkContext.accumulator(v). 클러스터에서 실행중인 작업은 다음을 사용하여 클러스터에 추가 할 수 있습니다.add메서드 또는 + = 연산자 (Scala 및 Python). 그러나 그들은 그 값을 읽을 수 없습니다. 드라이버 프로그램 만이 그 사용하여 누산기의 값을 읽을 수 있습니다.value 방법.
아래에 주어진 코드는 배열의 요소를 더하는 데 사용되는 누산기를 보여줍니다.
scala> val accum = sc.accumulator(0)
scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
위 코드의 출력을 보려면 다음 명령을 사용하십시오.
scala> accum.value
산출
res2: Int = 10
숫자 RDD 연산
Spark를 사용하면 미리 정의 된 API 메서드 중 하나를 사용하여 숫자 데이터에 대해 다양한 작업을 수행 할 수 있습니다. Spark의 숫자 연산은 한 번에 한 요소 씩 모델을 빌드 할 수있는 스트리밍 알고리즘으로 구현됩니다.
이러한 작업은 계산되어 StatusCounter 호출하여 객체 status() 방법.
다음은 사용할 수있는 숫자 메서드 목록입니다. StatusCounter.
S. 아니 | 방법 및 의미 |
---|---|
1 | count() RDD의 요소 수입니다. |
2 | Mean() RDD의 요소 평균입니다. |
삼 | Sum() RDD에있는 요소의 총 가치. |
4 | Max() RDD의 모든 요소 중 최대 값입니다. |
5 | Min() RDD의 모든 요소 중 최소값입니다. |
6 | Variance() 요소의 차이. |
7 | Stdev() 표준 편차. |
이러한 메서드 중 하나만 사용하려면 RDD에서 직접 해당 메서드를 호출 할 수 있습니다.