[pyspark入门]Dataframe groupby分组后统计词频WordCount的几种写法

每次写spark分组统计词频总要先到网上抄代码[捂脸],索性在这里做个总结和记录,也为需要的小伙伴提供参考

wordcount在分布式当中的地位,大概跟初学编程语言时的hello world差不多。Pyspark基础 wordcount.py在此不再赘述了,有需要请参考:WordCount入门

问题

已知一个dataframe,想按照某字段/某列(column)分组后,再对各分组中某String类型的字段统计词频,这里默认已经分好词,直接split即可。

那么,与入门wordcount唯一的区别也就找到了,我们需要对GroupedData进行map-reduce词频统计,而最终的结果也不再是<word, count>Pair对,而是<(group_field, word), count>Pair对,至于后续是否需要分组排序,则可以再灵活操作了,我们这里只考虑统计词频这一步。

Talk is cheap。直接上代码了

写法1

## 首先我们先简单创建个df
group_names = [1,1,1,2,2,2]
texts = [
    'python is best',
    'spark is best',
    'dataframe is best',
    
### 如何在 PySpark DataFrame 中使用 `groupby` 方法 在 PySparkDataFrame API 中,`groupby` 是一种强大的聚合工具。通过该方法可以基于一个或多个列对数据集进行分组,并执行各种类型的聚合操作。 下面是一个简单的例子来展示如何使用 `groupby`: ```python from pyspark.sql import SparkSession spark = SparkSession.builder.appName("GroupByExample").getOrCreate() data = [("Alice", "Sales", 3000), ("Bob", "Sales", 4100), ("Carol", "HR", 3000), ("Dave", "Engineering", 7000)] columns = ["name", "department", "salary"] df = spark.createDataFrame(data, columns) result_df = df.groupby("department").avg("salary") result_df.show() ``` 上述代码创建了一个包含员工姓名、部门以及薪水的数据框 `df` 。接着调用了 `groupby` 函数按照 “department” 列进行了分组,并计算了每个部门平均工资[^1]。 对于更复杂的场景,比如想要获取各部门最高薪资及其对应的雇员名字,则可以通过如下方式实现: ```python from pyspark.sql.functions import col, max as _max max_salary_per_dept = (df.groupBy("department") .agg(_max("salary").alias("max_salary")) .join(df.select("name", "department", "salary"), on=["department"], how="inner") .where(col("salary") == col("max_salary"))) max_salary_per_dept.show() ``` 这段脚本首先构建了一个新的 DataFrame 来保存每部门的最大薪酬;之后再将其与原始表连接起来找到对应的名字并显示出来[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值