Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengira Median dan Kuantil dengan Cekap dalam Apache Spark?

Bagaimana untuk Mengira Median dan Kuantil dengan Cekap dalam Apache Spark?

DDD
DDDasal
2024-11-02 09:44:02245semak imbas

How to Efficiently Calculate Median and Quantiles in Apache Spark?

Mencari Median dan Kuantil dalam Apache Spark

Pengenalan

Apabila berurusan dengan set data yang besar, mencari median dan kuantil boleh menjadi tugas yang mahal dari segi pengiraan. Keupayaan pengkomputeran teragih Spark menjadikannya sangat sesuai untuk mengendalikan pengiraan sedemikian.

Spark 2.0

Anggaran dengan anggaranKuantil:

Contoh:

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

Dalam pengagregatan SQL, anda boleh menggunakan fungsi approx_percentile untuk menganggarkan kuantil:

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

Pra-Spark 2.0

Persampelan dan Tempatan Pengiraan:

Untuk set data yang lebih kecil atau apabila kuantiti yang tepat tidak diperlukan, pensampelan data dan pengiraan kuantiti secara tempatan boleh menjadi pilihan yang berdaya maju. Ini mengelakkan overhed untuk mengisih dan mengagihkan data.

Contoh:

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

Isih dan Pembahagian:

Jika pensampelan tidak dapat dilaksanakan, menyusun data dan mencari median atau kuantiti lain boleh dilakukan secara terus pada RDD. Walau bagaimanapun, pendekatan ini boleh menjadi lebih perlahan dan kurang cekap berbanding dengan pensampelan.

Contoh:

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

UDAF Hive:

Jika menggunakan HiveContext, anda boleh memanfaatkan UDAF Hive untuk mengira kuantiti:

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

Kesimpulan

Spark menyediakan pelbagai pilihan untuk mencari median dan kuantiti. Pilihan kaedah bergantung pada faktor seperti saiz data, keperluan ketepatan dan ketersediaan HiveContext.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Median dan Kuantil dengan Cekap dalam Apache Spark?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn