我使用Spark 2.1.1(pyspark),在一個DataBrame上執行一個groupby,然後進行一次approx_count_distinct聚合,大約有14億行。 groupby操作會導致約600萬個組對其執行approx_count_distinct操作。預計不同組別的計數範圍從一位數到幾百萬。PySpark 2.1.1 groupby + approximate_count_distinct給出0的計數
以下是我正在使用的代碼段,其中包含項目ID的'item_id'列和包含用戶ID的'user_id'。我想統計與每個項目關聯的不同用戶。
>>> distinct_counts_df = data_df.groupby(['item_id']).agg(approx_count_distinct(data_df.user_id).alias('distinct_count'))
在產生的數據幀,我越來越爲0的數約16000項:
>>> distinct_counts_df.filter(distinct_counts_df.distinct_count == 0).count()
16032
當我檢查的實際重複計數幾個這些項目中,我得到了之間的數字20和60.這是HLL近似計數算法的準確度的一個已知問題還是這是一個錯誤?
感謝您的建議。我試着用rsd = 0.008。花了大約10倍的時間運行,但我得到的結果中0的數量相同,所以它沒有解決問題。 – mmcc
然後我猜想結果仍然接近這個程度。幾乎大部分情況下,approx_count_distinct都不會給出正確的結果。看到這個https://databricks.com/blog/2016/05/19/approximate-algorithms-in-apache-spark-hyperloglog-and-quantiles.html –