You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按日期分组取唯一作者并统计其favCount每日总和(支持PySpark/Pandas/SQL)

每日发布帖子作者favCount总和统计方案

核心逻辑:同一作者单日发布多篇帖子会导致连接后的数据集出现重复的作者记录,因此需要先按date和authorId两个字段去重,保证每个作者在同一天仅保留一条有效记录,再按日期分组对favCount求和即可得到预期结果。
注意:请勿直接使用SUM(DISTINCT favCount)计算,不同作者可能有相同的favCount数值,会导致求和结果错误。

PySpark 实现

假设你连接后的DataFrame名为joined_df,实现代码如下:

from pyspark.sql.functions import col, sum

# 1. 先将favCount转换为整数类型(示例中为字符串格式,可根据实际类型跳过该步)
processed_df = joined_df.withColumn("favCount", col("favCount").cast("int"))

# 2. 按日期和作者ID去重后分组求和
result = processed_df \
    .dropDuplicates(["date", "authorId"]) \
    .groupBy("date") \
    .agg(sum("favCount").alias("sum(favCount)")) \
    .orderBy("date")

# 查看结果
result.show()

Pandas 实现

同样假设连接后的DataFrame名为joined_df,实现代码如下:

import pandas as pd

# 转换favCount为数值类型
joined_df["favCount"] = pd.to_numeric(joined_df["favCount"])

# 去重后分组求和
result = joined_df \
    .drop_duplicates(subset=["date", "authorId"]) \
    .groupby("date", as_index=False)["favCount"] \
    .sum() \
    .rename(columns={"favCount": "sum(favCount)"})

# 查看结果
print(result)

SQL 实现

如果通过SQL直接查询连接后的表,可使用如下语句:

SELECT 
    date,
    SUM(favCount) AS `sum(favCount)`
FROM (
    -- 子查询先按日期、作者ID去重,保留唯一的favCount
    SELECT DISTINCT 
        date, 
        authorId, 
        CAST(favCount AS UNSIGNED) AS favCount 
    FROM joined_table
) t
GROUP BY date
ORDER BY date;

如果直接从原始posts和authors表查询,也可以写为:

SELECT 
    p.date,
    SUM(CAST(a.favCount AS UNSIGNED)) AS `sum(favCount)`
FROM posts p
INNER JOIN authors a ON p.authorId = a.authorId
GROUP BY p.date, p.authorId
GROUP BY p.date
ORDER BY p.date;

内容的提问来源于stack exchange,提问作者Abdalla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:48:03