[HADOOP] Apache Spark에서 정확한 중간 값을 어떻게 계산합니까?
HADOOPApache Spark에서 정확한 중간 값을 어떻게 계산합니까?
이 페이지는 몇 가지 통계 함수 (평균, 표준 편차, 분산 등)를 포함하지만 중앙값을 포함하지 않습니다. 정확한 중앙값은 어떻게 계산합니까?
감사
해결법
-
==============================
1.RDD를 정렬하고 중간 또는 두 요소의 평균에서 요소를 가져와야합니다. 다음은 RDD [Int]의 예입니다.
RDD를 정렬하고 중간 또는 두 요소의 평균에서 요소를 가져와야합니다. 다음은 RDD [Int]의 예입니다.
import org.apache.spark.SparkContext._ val rdd: RDD[Int] = ??? val sorted = rdd.sortBy(identity).zipWithIndex().map { case (v, idx) => (idx, v) } val count = sorted.count() val median: Double = if (count % 2 == 0) { val l = count / 2 - 1 val r = l + 1 (sorted.lookup(l).head + sorted.lookup(r).head).toDouble / 2 } else sorted.lookup(count / 2).head.toDouble
-
==============================
2.Spark 2.0+ 및 DataFrame API를 사용하여 approxQuantile 메서드를 사용할 수 있습니다.
Spark 2.0+ 및 DataFrame API를 사용하여 approxQuantile 메서드를 사용할 수 있습니다.
def approxQuantile(col: String, probabilities: Array[Double], relativeError: Double)
또한 Spark 버전 2.2 이후 여러 열에서 동시에 작동합니다. probabilites를 Array (0.5)로 설정하고 relativeError를 0으로 설정하면 정확한 중간 값을 계산합니다. 문서에서 :
그럼에도 불구하고 relativeError를 0으로 설정할 때 정밀도에 문제가있는 것으로 보입니다. 여기에있는 질문을보십시오. 어떤 경우에는 0에 가까운 낮은 오류가 더 잘 작동합니다 (Spark 버전에 따라 다름).
1에서 99 사이의 숫자의 중앙값을 계산하고 낮은 relativeError를 사용하는 작은 작업 예제 :
val df = (0 to 99).toDF("num") val median = df.stat.approxQuantile("num", Array(0.5), 0.001)(0) println(median)
반환 된 중앙값은 50.0입니다.
from https://stackoverflow.com/questions/28158729/how-can-i-calculate-exact-median-with-apache-spark by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Sqoop - 데이터 분할 (0) | 2019.05.30 |
---|---|
[HADOOP] 내 BroadcastHashJoin이 Spark의 ShuffledHashJoin보다 느린 이유 (0) | 2019.05.30 |
[HADOOP] hadoop의 -libjars 문제 (0) | 2019.05.30 |
[HADOOP] 멀티 문자 구분 기호로 하이브 테이블 만들기 (0) | 2019.05.30 |
[HADOOP] 그러한 메소드가 없다는 예외 Hadoop <init> (0) | 2019.05.30 |