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!