PySpark如何筛选行求和以找出广告点击量最高的国家
PySpark 实现获取广告点击量最高国家
核心逻辑是按国家维度对广告点击字段做分组求和,再按总点击量倒序排序后取对应结果即可。
完整实现代码
1. 依赖导入及SparkSession初始化
from pyspark.sql import SparkSession from pyspark.sql.functions import sum, desc, max # 初始化Spark会话 spark = SparkSession.builder.appName("TopAdClickCountry").getOrCreate()
2. 数据集加载
可根据你的实际存储格式调整加载逻辑,以下提供两种场景的写法:
- 从CSV文件加载(匹配你给出的示例数据格式)
df = spark.read.option("header", "true") \ .option("delimiter", "|") \ .option("trimValues", "true") \ .csv("替换为你的实际文件路径")
- 内存构造测试数据(和你示例数据完全一致)
test_data = [("USA", 1), ("USA", 0), ("USA", 1), ("PR", 0), ("PR", 0), ("PR", 1)] df = spark.createDataFrame(test_data, schema=["Country", "Ad Click"])
3. 计算最高点击国家
仅取单条最高的场景
# 按国家分组求和、倒序排序后取第一条 top_country = df.groupBy("Country") \ .agg(sum("Ad Click").alias("total_clicks")) \ .orderBy(desc("total_clicks")) \ .limit(1) # 打印结果 top_country.show()
对应示例数据的输出结果为:
+-------+------------+ |Country|total_clicks| +-------+------------+ | USA| 2| +-------+------------+
处理多个国家点击量并列最高的场景
# 先计算所有国家的总点击量 country_click_sum = df.groupBy("Country") \ .agg(sum("Ad Click").alias("total_clicks")) # 获取最高点击量数值 max_click_val = country_click_sum.agg(max("total_clicks")).collect()[0][0] # 过滤所有总点击量等于最高值的国家 top_countries = country_click_sum.filter(country_click_sum.total_clicks == max_click_val) # 打印结果 top_countries.show()
内容的提问来源于stack exchange,提问作者AlyLo
相关产品推荐
相关产品推荐

