使用 Apache Spark 进行高效计数

2024-02-14

1 亿客户在几个网站(假设有 100 个网站)的页面上点击了 1000 亿次。您可以在大型数据集中获取点击流。

使用 Apache Spark 的抽象,计算每个网站的不同访问者的最有效方法是什么?


visitors.distinct().count()将是显而易见的方法,第一种方法是不同的,您可以指定并行性级别,并且还可以看到速度的改进。如果可以将访客设置为流并使用 D 流,则可以实时进行计数。您可以直接从目录进行流式传输,并使用与 RDD 上相同的方法,例如:

val file = ssc.textFileStream("...") file.distinct().count()

最后一个选项是使用def countApproxDistinct(relativeSD: Double = 0.05): Long然而,这被标记为实验性的,但会比计数快得多,如果relativeSD(标准偏差)较高。

EDIT:由于您希望每个网站的计数可以减少网站 ID,因此可以有效地完成此操作(使用组合器),因为计数是聚合的。如果您有网站名称用户 ID 元组的 RDD,您可以这样做。visitors.countDistinctByKey() or visitors.countApproxDistinctByKey(),这个近似值又是实验性的。要使用大约不同的键,您需要一个PairRDD http://people.apache.org/~pwendell/spark-1.0.0-rc6-docs/api/scala/index.html#org.apache.spark.rdd.PairRDDFunctions

有趣的旁注,如果您可以接受近似值并且想要快速获得结果,您可能需要研究一下blinkDB http://blinkdb.org由与 Spark amp 实验室相同的人制造。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Apache Spark 进行高效计数 的相关文章

随机推荐