Heim  >  Artikel  >  Backend-Entwicklung  >  Wie berechnet man Median und Quantile in Apache Spark effizient?

Wie berechnet man Median und Quantile in Apache Spark effizient?

DDD
DDDOriginal
2024-11-02 09:44:02141Durchsuche

How to Efficiently Calculate Median and Quantiles in Apache Spark?

Median und Quantile in Apache Spark finden

Einführung

Beim Umgang mit großen Datensätzen Das Finden des Medians und der Quantile kann eine rechenintensive Aufgabe sein. Aufgrund seiner verteilten Rechenfähigkeiten eignet sich Spark gut für die Bearbeitung solcher Berechnungen.

Spark 2.0

Näherung mit approxQuantile:

Spark 2.0 und höher bieten die approxQuantile-Methode, die den Greenwald-Khanna-Algorithmus für eine effiziente Quantilschätzung nutzt. Es gibt den Quantilwert für eine gegebene Wahrscheinlichkeit p mit einem optionalen relativen Fehlerschwellenwert zurück.

Beispiel:

<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:

In der SQL-Aggregation können Sie die Funktion approx_percentile verwenden, um das Quantil zu schätzen:

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

Pre-Spark 2.0

Sampling und Local Berechnung:

Für kleinere Datensätze oder wenn keine genauen Quantile erforderlich sind, kann die Stichprobenerhebung der Daten und die lokale Berechnung der Quantile eine praktikable Option sein. Dadurch wird der Aufwand für das Sortieren und Verteilen der Daten vermieden.

Beispiel:

<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>

Sortieren und Partitionieren:

Wenn eine Stichprobenentnahme nicht möglich ist, können die Daten sortiert und der Median oder andere Quantile direkt auf dem RDD ermittelt werden. Allerdings kann dieser Ansatz im Vergleich zur Probenahme langsamer und weniger effizient sein.

Beispiel:

<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-UDAFs:

Wenn Sie HiveContext verwenden, können Sie Hive-UDAFs zur Berechnung von Quantilen nutzen:

<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>

Fazit

Spark bietet verschiedene Optionen zum Ermitteln von Medianen und Quantilen. Die Wahl der Methode hängt von Faktoren wie Datengröße, Genauigkeitsanforderungen und der Verfügbarkeit von HiveContext ab.

Das obige ist der detaillierte Inhalt vonWie berechnet man Median und Quantile in Apache Spark effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn