【发布时间】:2021-09-25 15:52:16
【问题描述】:
我有一个 Spark DataFrame (sdf),其中每一行显示一个 IP 访问一个 URL。我想在这个数据框中计算不同的 IP-URL 对,最直接的解决方案是 sdf.groupBy("ip", "url").count()。然而,由于数据帧有数十亿行,精确计数可能需要相当长的时间。我对 PySpark 不是特别熟悉——我尝试将 .count() 替换为 .approx_count_distinct(),这在语法上是不正确的。
我搜索了“如何使用.approx_count_distinct() 和groupBy()”并找到this answer。但是,那里建议的解决方案(类似于这些方面:sdf.groupby(["ip", "url"]).agg(F.approx_count_distinct(sdf.url).alias("distinct_count")))似乎并没有给我想要的计数。 .approx_count_distinct() 方法不能将两列作为参数,所以我也不能写 sdf.agg(F.approx_count_distinct(sdf.ip, sdf.url).alias("distinct_count"))。
我的问题是,有没有办法让.approx_count_distinct() 处理多个列并计算这些列的不同组合?如果没有,是否还有其他功能可以做到这一点?它的示例用法是什么?
非常感谢您提前提供的帮助!
【问题讨论】:
标签: python sql apache-spark pyspark apache-spark-sql