고급 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에서 직접 해당 메서드를 호출 할 수 있습니다.