pyspark统计指标计算

下面介绍如何使用pyspark处理计算超大数据的统计指标,主要为:最大值、最小值、均值、方差、标准差、中位数、众数、非重复值等。

# 加载稽核数据
rd_sql = f"select * from database.table"
spark_data = spark.sql(rd_sql)
# 计算众数 由于spark 2.4版本未内置相关函数 需要自定义
import pyspark.sql.functions as F
# 自定义mode的计算
def sparkdf_mode(df, cols):# 构建一个空数据框mode_df = pd.DataFrame()# 循环每一列for col in cols:# 先过滤空值filtered_df = df.filter(F.col(col).isNotNull())# 加个判断 防止数据全空置时报错if filtered_df.count()>0:# 统计出现次数 排序grouped_counts = filtered_df.groupBy(col).count().orderBy(F.col("count").desc())# 获取计数值最大的第一行first_row = grouped_counts.first()# 转sparkdfpdf = spark.createDataFrame([first_row], grouped_counts.columns).toPandas()[col]else:# 数据全空置 赋值Nonepdf = pd.DataFrame({col: [None]}) # 拼接mode_df = pd.concat([mode_df, pdf], axis=1)return mode_df
from pyspark.sql.functions import col, count, when, approx_count_distinct
# 分开统计 先统计字符类型
# 统计指标
string_stats = spark_data.select(string_cols+date_cols).summary("max","min").toPandas()
# 非空值数量
string_nonull = spark_data.select([count(when(col(c).isNotNull(), c)).alias(c) for c in (string_cols+date_cols)]).toPandas()
# 非重复值
string_unique = spark_data.agg(*[approx_count_distinct(col(c)).alias(c) for c in (string_cols+date_cols)]).toPandas()
# 众数
string_mode = sparkdf_mode(spark_data, (string_cols+date_cols))
# 添加空值占位
null_rows = pd.DataFrame(None, index=np.arange(len(string_stats), len(string_stats) + 3), columns=string_stats.columns)
string_stats = string_stats.append(null_rows)
# 上下拼接
string_data = pd.concat([string_stats.iloc[:, 1:], string_nonull, string_unique, string_mode])
print(f"string_data稽核完成")
# 统计数值类型
# 统计指标
float_stats = spark_data.select(float_cols).summary("max","min","mean","50%","stddev").toPandas()
print(f"float_stats稽核完成")
# 非空值
float_nonull = spark_data.select([count(when(col(c).isNotNull(), c)).alias(c) for c in float_cols]).toPandas()
# 非重复值
float_unique = spark_data.agg(*[approx_count_distinct(col(c)).alias(c) for c in float_cols]).toPandas()
# 众数
float_mode = sparkdf_mode(spark_data, float_cols)
# 上下拼接
float_data = pd.concat([float_stats.iloc[:, 1:], float_nonull, float_unique, float_mode])
print(f"float_data稽核完成")
# 合并转置
pdf = pd.concat([string_data, float_data], axis=1).T
# 重命名
pdf.columns = ["max", "min", "mean", "median", "std", "nonull_cnt", "unique_cnt", "mode"]
# pdf转为sdf
sdf = spark.createDataFrame(pdf)
# 创建临时视图 用于sqlAPI操作
sdf.createOrReplaceTempView("temp_view")
# 插入库表
spark.sql(f"insert overwrite table database.table select * from temp_view")
# 用完删除临时视图
spark.catalog.dropTempView("temp_view")
# 关闭spark
spark.stop()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/698090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 工具类 与 Redis 布隆过滤器

Redis 工具类 1. 核心依赖 <!--redis--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency><groupId>com.google.guava…

论文选题分享及思路(一)《基于C51单片机的自动化测量产线的设计》

论文选题分享及思路 题目 《基于C51单片机的自动化测量产线的设计》 核心&#xff1a;使用C51单片机按键控制传送带运动&#xff0c;并增加激光测量高度宽度功能及称重功能。 框架&#xff1a;摘要&#xff0c;题目背景&#xff0c;创新点&#xff0c;设计原理&#xff0c;程…

ubuntu解决“E: Unable to locate package lrzsz“

今天在ubuntu上安装rzsz包时报错&#xff0c;提示无法定位包&#xff0c;提示如下 出现这个问题是因为apt的源没有更新&#xff0c;我们直接说解决办法 把下面的命令执行一遍即可 sudo add-apt-repository main sudo add-apt-repository universe sudo add-apt-repository re…

fly-barrage 前端弹幕库(1):项目介绍

fly-barrage 是我写的一个前端弹幕库&#xff0c;由于经常在 Bilibili 上看视频&#xff0c;所以对网页的弹幕功能一直蛮感兴趣的&#xff0c;所以做了这个库&#xff0c;可以帮助前端快速的实现弹幕功能。 项目官网地址&#xff1a;https://fly-barrage.netlify.app/&#xff…

Redis信创平替之TongRDS(东方通),麒麟系统安装步骤

我的系统: 银河麒麟桌面系统V10(SP1)兆芯版 1.先进入东方通申请使用 2.客服会发送一个TongRDS包与center.lic给你(我这里只拿到.tar.gz文件,没有网上的什么安装版) 3.上传全部文件到目录中 4.服务节点安装,并启动 tar -zxvf TongRDS-2.2.1.2_P3.Node.tar.gz cd pmemdb/bin/…

QT入门看这一篇就够了——超详细讲解(40000多字详细讲解,涵盖qt大量知识)

目录 一、Qt概述 1.1 什么是Qt 1.2 Qt的发展史 1.3 Qt的优势 1.4 Qt版本 1.5 成功案例 二、创建Qt项目 2.1 使用向导创建 2.2 一个最简单的Qt应用程序 2.2.1 main函数中 2.2.2 类头文件 2.3 .pro文件 2.4 命名规范 2.5 QtCreator常用快捷键 三、Qt按钮小程序 …

MySQL5.7.24解压版安装教程

一、MySQL5.7.24解压版安装步骤 1.在指定目录下解压压缩包。比如在D:\Program Files\mysql下解压 2.在D:\Program Files\mysql\mysql-5.7.24-winx64目录下新建data文件夹&#xff0c;如果此目录下没有my.ini也需要手动创建 3.my.ini 文件配置内容如下 [mysqld] # 设置3306端口…

逻辑回归算法概述

逻辑回归算法概述 概述如何调用库函数选择适当的优化算法优化算法的作用逻辑回归 LogisticRegression 中优化算法的选择 其他机器学习算法&#xff1a;机器学习实战工具安装和使用 概述 逻辑回归是一种用于估计某种事物可能性的算法&#xff0c;可用于回归和分类任务。它通过历…

vue3使用百度地图

前情提要&#xff1a; 本文vue采用vue3框架&#xff0c;使用百度地图通过组件vue-baidu-map-3x&#xff1a; 组件官网&#xff1a;地图容器 | vue-baidu-map-3x 使用百度地图需要 申请百度地图AK秘钥 步骤&#xff1a;1.进入百度地图开放平台 | 百度地图API SDK | 地图开…

Nginx 配置前端工程项目二级目录

前提&#xff1a; 前端工程技术框架: vue 后端工程技术工程&#xff1a;spring boot 需求&#xff1a;需要通过二级目录访问前端工程&#xff1a; 如之前&#xff1a;http://127.0.0.1:80/ 改成 http://127.0.0.1/secondDirectory:80/ 一.前端工程支持二级目录 1.编译文…

三、矩阵基本知识

目录 1. 理解 2、矩阵的直观感受 3、矩阵与向量 1. 理解 ①矩阵是一个向量组&#xff0c;由许多 行向量 和 纵向量 组成。 ②矩阵方程求解 用增广矩阵初等变换化为 E 。齐次/非齐次方程组 的解用 初等变化 化为 行最简阶梯型。 ③初步认为由多元一次方程组的系数组成&…

petalinux_zynq7 驱动DAC以及ADC模块之六:qt显示adc波形

前文&#xff1a; petalinux_zynq7 C语言驱动DAC以及ADC模块之一&#xff1a;建立IPhttps://blog.csdn.net/qq_27158179/article/details/136234296petalinux_zynq7 C语言驱动DAC以及ADC模块之二&#xff1a;petalinuxhttps://blog.csdn.net/qq_27158179/article/details/1362…

stm32看门狗

目录 一、看门狗介绍 二、看门狗分类 1、独立看门狗(Independent Watchdog,lWDG) 例程

【C++】——模板初阶 | STL简介

前言: 模板初阶 | STL简介 文章目录 一、模板初阶1.1 函数模板1.2 类模板 二、STL简介 &#xff08;了解&#xff09; 一、模板初阶 泛式编程&#xff08;Generic Programming&#xff09;指的是一种编程范式&#xff0c;其核心思想是编写可以在不同数据类型上通用的代码&#…

智能科技助力服装业:商品计划管理系统的革命性变革

随着智能科技的飞速发展&#xff0c;服装行业正在经历前所未有的变革。在这股浪潮中&#xff0c;商品计划管理系统的智能化转型成为了行业的核心驱动力。这种变革不仅极大地提高了服装企业的运营效率和市场竞争力&#xff0c;更为整个行业的可持续发展注入了新的活力。 智能商…

你听说过柔性数组吗?

目录 1. 柔性数组的概念 2. 柔性数组的特点 3. 柔性数组的使用 4. 柔性数组的优势 5.完结散花 悟已往之不谏&#xff0c;知来者犹可追 创作不易&#xff0c;宝子们&#xff01;如果这篇文章对你们有帮助的话&#…

怎么理解ping?这是我听过最好的回答

晚上好&#xff0c;我是老杨。 Ping这几个字母&#xff0c;已经深入网工人的骨髓了吧&#xff1f; 把Ping用到工作里&#xff0c;肯定不少人在用&#xff0c;但对Ping的了解和理解是不是足够深&#xff0c;取决了你能在工作里用到什么程度&#xff0c;能让它帮你到什么地步。…

美格智能联合罗德与施瓦茨完成5G RedCap模组SRM813Q验证,推动5G轻量化全面商用

全球5G发展进入下半场&#xff0c;5G RedCap以其低成本、低功耗的特性成为行业焦点。近日&#xff0c;中国移动携手合作伙伴率先完成全球最大规模、最全场景、最全产业的RedCap现网规模试验&#xff0c;推动首批芯片、终端具备商用条件&#xff0c;RedCap端到端产业已全面达到商…

c#常用的数据结构

Array数组 内存上连续存储&#xff0c; 数组是引用类型而不是值类型。 优点&#xff1a; 按照索引查询元素速度很快。 按照索引遍历数组很方便。 缺点&#xff1a; 声明数组时大小必须确定&#xff0c;且大小不能改变。 添加和删除元素的速度很慢&#xff0c;因为需要移…

10.CSS3的calc函数

CSS3 的 calc 函数 经典真题 CSS 的计算属性知道吗&#xff1f; CSS3 中的 calc 函数 calc 是英文单词 calculate&#xff08;计算&#xff09;的缩写&#xff0c;是 CSS3 的一个新增的功能。 MDN 的解释为可以用在任何长度、数值、时间、角度、频率等处&#xff0c;语法如…