文章目录

  • 假数据截图
  • 先来看一下描述
  • groupby分组图例
    • pandas groupby分组图例
    • pyspark groupby分组图例
  • 实现思路
  • pyspark groupby 后将遍历的每一行转成pandas df

注意:本文的分组,并没有聚合

假数据截图

先来看一下描述

这里分组没有聚合

原来pandas的groupby处理是对根据id分组后的每个组的df进行处理,方便理解起见看如下代码块:

换句话说,pandas里的groupby之后是可以遍历的,也就是可以遍历分组后的每个小df,如下:

# pandas实现
def pandas_gb(data):# 根据id分组,处理每个分组后的dffor ids, da_gb in data.groupby('alpos_id'):print(ids, len(da_gb))if len(da_gb) < 5:da_gb = da_gb.append(da_gb)print(len(da_gb))'''
out:0_2011082923279930 11110_3001461399082077 990_3031798112278383 480_3071297379437968 12
'''

比如里面打印的就是需求,当然实际上我对于分组后的每个小df处理上会更加复杂,这里为了方便演示就用上面的例子,现在想用pyspark来替换实现如上方式

groupby分组图例

pandas groupby分组图例


如果觉得不理解,也可以看下面这个图:


也就是说,pandas里是纵向的,但是在spark里确实横向的

pyspark groupby分组图例

按照上面pandas的例子,就是下图:

实现思路

import pandas as pd
from pyspark import SparkContext, SQLContext
from pyspark.sql import SparkSession
from pyspark.sql import functions as fnsc = SparkContext()
ss = SparkSession(sc).builder \.config("spark.driver.memory", "2g").config('spark.executor.memory', '2g')\.config('spark.executor.cores', '2')\.config('spark.driver.cores', '2')\.config('spark.sql.shuffle.partitions', 200)\.config("spark.debug.maxToStringFields", "100")\.appName('to_hongzhen').getOrCreate()sc.setLogLevel('ERROR')

由图可见,我们只需要循环的遍历每一行即可,直接看代码:

  1. 首先需要分组提取所需字段:
data = ss.createDataFrame(data)da_gb = data.groupby('alpos_id').agg(fn.collect_list('impressions').alias('impressions_list'),fn.collect_list('ecpm').alias('ecpm_list')
)da_gb.show()

  1. 通过map以RDD的形式来遍历每一行数据,这里的每一行数据其实就等同于上面pandas分组后的小df
dardds = da_gb.rdd.map(lambda data: ({data.alpos_id: [data.impressions_list, data.ecpm_list]}))
'''
0_3031798112278383 [4.0, 62.0, 58.0, 4.0] [2.5, 6.9355, 9.3103, 5.0]0_3001461399082077 [0.2, 0.0, 0.142857142857142, 0.0, 0.181818181818181, 0.3, 0.3125, 0.0, 0.0] [43.6990133333333, 40.1434533333333, 41.21348, 34.8579266666666, 35.2619666666666, 35.6953, 44.22308, 44.4453, 44.18604]0_3071297379437968 [8.0] [73.75]0_2011082923279930 [222.0, 2269.0, 212.0, 43.0, 29.0, 172.0, 192.0, 232.0, 288.0, 306.0, 328.0] [14.4595, 14.0899, 14.3868, 12.5581, 12.069, 30.814, 14.1667, 12.6293, 15.5556, 8.5948, 11.2805]
'''
  1. 通过foeach的形式来对RDD每一行进行处理即可,比如这里还是以上面pandas的例子作为替换,需要的可以根据自己的需求来实现:
def row_dealwith(data):ids = list(data.keys())[0]values = data.get(ids)# print(ids, values[0], values[1])print(ids, len(values[0]))print()dardds.foreach(row_dealwith)
'''
0_3071297379437968 10_2011082923279930 110_3031798112278383 40_3001461399082077 9
'''

pyspark groupby 后将遍历的每一行转成pandas df

https://blog.csdn.net/qq_42363032/article/details/118303524

pyspark groupby分组 遍历分组后的数据(每一行)相关推荐

  1. pandas—groupby如何得到分组里的数据

    pandas-groupby如何得到分组里的数据 有的时候csv文件过大,利用循环时间消耗大,因此可以通过分组. 原数据如下: 想把link和future特征为基准,把current整合起来放在一列. ...

  2. pandas分组排序:对excel数据按日期分组后排序

    原数据的样子 | | | 需求 按照时间大小将所有数据重新排序 |–|–| | | | 处理思路 1.pandas读取数据文件,日期作为str格式读出 2.将[行标签]列的日期和小时信息分开成单独两列 ...

  3. Excel技能培训之六-定位功能,隔行插入删除空行,分组插入空行,高亮行列间差异,复制筛选后的数据

    1. 在每一行后面插入一个新行 使用2格辅助列,间隔输入1 选中辅助列的内容,将值向下填充到最后,选择复制单元格,结果如下: 结果如下: 按ctrl +G 或者F5 选择定位条件: 选择空值,确定 右 ...

  4. mysql分组区某列最后一条_[MySQL]MySQL数据库如何按某列分组排序后查询每个分组的最后一条数据?...

    比如当前有如下的消息表(messages)及示例数据: Id Name Other_Columns ------------------------- 1 A A_data_1 2 A A_data_ ...

  5. python dataframe group by_Python DataFrame.groupby()聚合函数,分组级运算

    pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个键(可以是函数.数组或DataFrame列名)拆分pandas对象.计算分 ...

  6. stream 多个字段分组_Python Pandas对Excel数据的分组聚合和数据透视

    使用Excel进行商业数据分析的时候,最重要的就是两个手段就是vlookup函数和数据透视表.本章就讲解一下与数据透视功能相关的分组聚合和数据透视.其实分组聚合和数据透视两者基本是等价的,但由于使用的 ...

  7. pandas学习(数据分组与分组运算、离散化处理、数据合并)

    pandas学习(数据分组与分组运算.离散化处理.数据合并) 目录 数据分组与分组运算 离散化处理 数据合并 数据分组与分组运算 GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表数 ...

  8. groupBy()分组

    groupBy算子 1)函数签名 def groupBy[K](f:T=>K)(implicit kt:ClassTag[K]):RDD[(K,Iterable[T])] 2)功能说明 分组,按 ...

  9. 润乾报表分组求和_实现报表数据预先计算

    报表应用中,如果数据量较大或计算过程较复杂,往往会导致报表数据源准备过慢,从而影响报表性能.这种情况下可以预先计算报表需要的数据,在呈现时直接引用,使得用户在访问报表时可以迅速地获得响应. 一.当前的 ...

  10. sql 对groupby 后的数据limit_SQL(三)——汇总分析

    1. 汇总分析 函数的3个功能:①功能:②输入(参数):③输出(返回值) 查询课程编号为"0002"的总成绩: 查询选了课程的学生人数: 2.分组 sql分组:group by g ...

最新文章

  1. Asp.net中多项目共享Session
  2. vue点击图片后复制图片url_简单漂亮的(图床工具)开源图片上传工具——PicGo...
  3. json字符串与java对象的相互转换(jackson)
  4. makefile / CMake
  5. jdbc读取mysql时分秒yyyy-mm-dd hh:_[转]JDBC中日期时间的处理技巧
  6. win7 系统增加自定义分辨率_完美适配win7操作系统的平板电脑,专治软件不兼容...
  7. 大厂的 404 页面都长啥样?看到最后一个,我笑了。。。
  8. 初学者C语言输入输出挖坑填补处须知
  9. WebService 教程
  10. delphi2007 注册码
  11. 关于如何创造VBS编程语言环境
  12. 关于STM32的AD采样串口输出
  13. IT人士要注意叻:太晚睡会导致的后果(转)
  14. MyDiskTest硬盘检测绿色版
  15. C#调用支付宝转账接口 已调通
  16. 推荐歌曲 一百首最经典的歌曲下载
  17. 51单片机和LCD1602实现简单的密码锁
  18. RS485通信----基本原理+电路图
  19. 简单图片自动手动播放html,js手动播放图片实现图片轮播效果
  20. 8、店铺分类 - 后端功能开发 - 微擎小程序模块应用开发

热门文章

  1. facebook登陆授权 服务器接入记录
  2. onActivityResult不能收到setResult(RESULT_OK, intent);的回调
  3. c语言编写一个程序计算某年某月有几天,c语言:输入某一年的第几天,计算并输出它是这一年的第几月第几日,具体怎样编程...
  4. 页面增加问号图标,鼠标放置会提示文字信息。(记录日志)
  5. Linux 系统安装中文语言包
  6. golang源码解析之chan
  7. 计算机上的按键名有哪些,电脑键盘上各个按键名称与功能作用
  8. spring-rabbitmq Direct reply-to 模式
  9. Aho-Corasick(AC自动机)
  10. 人工智能技术应用的领域主要有哪些?