Heim > Artikel > Backend-Entwicklung > Wie berechnet man Median und Quantile in Apache Spark effizient?
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!