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 중국어 웹사이트의 기타 관련 기사를 참조하세요!