J'utilise Spark 2.1.1 (pyspark), en faisant un groupby suivi d'une agrégation approx_count_distinct sur un DataFrame avec environ 1,4 milliard de lignes. L'opération groupby génère environ 6 millions de groupes pour effectuer l'opération approx_count_distinct. Les nombres distincts attendus pour les groupes vont d'un chiffre à des millions.PySpark 2.1.1 groupby + approx_count_distinct donnant des comptes de 0
Voici l'extrait de code que j'utilise, avec la colonne 'item_id' contenant l'ID des éléments, et 'user_id' contenant l'ID des utilisateurs. Je veux compter les utilisateurs distincts associés à chaque élément.
>>> distinct_counts_df = data_df.groupby(['item_id']).agg(approx_count_distinct(data_df.user_id).alias('distinct_count'))
Dans le dataframe résultant, que je reçois environ 16 000 articles avec un compte de 0:
>>> distinct_counts_df.filter(distinct_counts_df.distinct_count == 0).count()
16032
Lorsque j'ai vérifié le compte distinct réelle pour certains de ces éléments, je suis entre les numéros 20 et 60. Est-ce un problème connu avec l'exactitude de l'algorithme de comptage approximatif HLL ou est-ce un bug?
Merci pour la suggestion. J'ai essayé avec rsd = 0.008. Il a fallu environ 10 fois plus de temps pour fonctionner, mais je reçois le même nombre de 0 dans les résultats, donc cela n'a pas résolu le problème. – mmcc
Ensuite, je suppose que les résultats resteront approximatifs dans cette mesure. approx_count_distinct ne donnera pas au point des résultats corrects dans presque tous les cas. Voir ce https://databricks.com/blog/2016/05/19/approximate-algorithms-in-apache-spark-hyperloglog-and-quantiles.html –