>  기사  >  백엔드 개발  >  Apache Spark에서 중앙값과 분위수를 효율적으로 계산하는 방법은 무엇입니까?

Apache Spark에서 중앙값과 분위수를 효율적으로 계산하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-02 09:44:02141검색

How to Efficiently Calculate Median and Quantiles in Apache Spark?

Apache Spark에서 중앙값 및 분위수 찾기

소개

대규모 데이터세트를 다룰 때, 중앙값과 분위수를 찾는 것은 계산 비용이 많이 드는 작업일 수 있습니다. Spark의 분산 컴퓨팅 기능은 이러한 계산을 처리하는 데 매우 적합합니다.

Spark 2.0

approximation with aboutQuantile:

Spark 2.0 이상에서는 효율적인 분위수 추정을 위해 Greenwald-Khanna 알고리즘을 활용하는 appQuantile 방법을 제공합니다. 선택적 상대 오류 임계값을 사용하여 주어진 확률 p에 대한 분위수 값을 반환합니다.

예:

<code class="python"># DataFrame:
df.approxQuantile("x", [0.5], 0.25)

# RDD:
rdd.map(lambda x: (x,)).toDF().approxQuantile("x", [0.5], 0.25)</code>

SQL:

SQL 집계에서는 about_percentile 함수를 사용하여 분위수를 추정할 수 있습니다.

<code class="sql">SELECT approx_percentile(column, 0.5) FROM table;</code>

Pre-Spark 2.0

샘플링 및 로컬 계산:

데이터세트가 작거나 정확한 분위수가 필요하지 않은 경우 데이터를 샘플링하고 로컬에서 분위수를 계산하는 것이 실행 가능한 옵션이 될 수 있습니다. 이렇게 하면 데이터 정렬 및 배포에 따른 오버헤드가 방지됩니다.

예:

<code class="python">from numpy import median

sampled_rdd = rdd.sample(False, 0.1)  # Sample 10% of the data
sampled_quantiles = median(sampled_rdd.collect())</code>

정렬 및 분할:

샘플링이 가능하지 않은 경우 데이터를 정렬하고 중앙값 또는 기타 분위수를 찾는 작업을 RDD에서 직접 수행할 수 있습니다. 그러나 이 접근 방식은 샘플링에 비해 속도가 느리고 효율성이 떨어질 수 있습니다.

예:

<code class="python">import numpy as np

# Sort and compute quantiles
sorted_rdd = rdd.sortBy(lambda x: x)
partition_index = int(len(rdd.collect()) * p)
partition_value = sorted_rdd.collect()[partition_index]

# Compute quantiles by splitting the partitions
if p == 0.5:
    median = partition_value
else:
    partition_value_left = sorted_rdd.collect()[partition_index - 1]
    median = partition_value_left + (p - 0.5) * (partition_value - partition_value_left)</code>

Hive UDAF:

HiveContext를 사용하는 경우 분위수 계산에 Hive UDAF를 활용할 수 있습니다.

<code class="python"># Continuous values:
sqlContext.sql("SELECT percentile(x, 0.5) FROM table")

# Integral values:
sqlContext.sql("SELECT percentile_approx(x, 0.5) FROM table")</code>

결론

Spark는 중앙값과 분위수를 찾기 위한 다양한 옵션을 제공합니다. 방법 선택은 데이터 크기, 정확도 요구 사항, HiveContext의 가용성과 같은 요소에 따라 달라집니다.

위 내용은 Apache Spark에서 중앙값과 분위수를 효율적으로 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.