gpt4 book ai didi

scala - 如何在 Spark/Scala 中使用窗口函数使用 countDistinct?

转载 作者:行者123 更新时间:2023-12-04 13:15:46 25 4
gpt4 key购买 nike

我需要使用由 2 列分隔的窗口函数,并对第 3 列和第 4 列进行不同计数。我可以在没有任何问题的情况下进行计数,但是使用不同的计数会引发异常 -

rg.apache.spark.sql.AnalysisException: Distinct window functions are not supported: 

有什么解决方法吗?

最佳答案

之前的答案提出了两种可能的技术:近似计数和 size(collect_set(...)) .两者都有问题。

如果您需要精确计数,这是在大数据中使用 COUNT(DISTINCT ...) 的主要原因,则近似计数将不起作用。此外,对于小数据,近似计数的实际错误率可能会有很大差异。
size(collect_set(...))可能会导致大数据处理显着放缓,因为它使用可变 Scala HashSet ,这是一个非常慢的数据结构。此外,您可能偶尔会得到奇怪的结果,例如,如果您在空数据帧上运行查询,因为 size(null)产生违反直觉的 -1。由于多种原因,Spark 的原生非重复计数运行得更快,主要是它不必在数组中生成所有计数数据。

解决此问题的典型方法是使用自联接。您可以按您需要的任何列进行分组,计算非重复计数或任何其他不能用作窗口函数的聚合函数,然后连接回原始数据。

关于scala - 如何在 Spark/Scala 中使用窗口函数使用 countDistinct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60627676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com