SPARK-SQL - group分组聚合api,agg()

news/2023/6/5 20:29:05

准备orders.json文件

{"id":"1", "userId":"1", "userName":"Join", "totalPrice":80.0,"qty":3.0}
{"id":"2", "userId":"1", "userName":"Join", "totalPrice":50.0,"qty":3.0}
{"id":"3", "userId":"2", "userName":"Jeffy", "totalPrice":200.0,"qty":3.0}
{"id":"4", "userId":"99999", "userName":"zombie", "totalPrice":222.0,"qty":3.0}

用agg来将分组函数聚合起来一起查询

示例代码

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;import java.util.HashMap;
import java.util.Map;import static org.apache.spark.sql.functions.*;
import static org.apache.spark.sql.functions.sum;public class test_28_2 {public static void main(String[] args) {SparkSession spark = SparkSession.builder().config("spark.driver.host", "localhost").appName("GroupApiTest").master("local").getOrCreate();spark.sparkContext().setLogLevel("ERROR");Dataset<Row> ordersDataSet = spark.read().json(Utils.BASE_PATH + "/join/orders.json");ordersDataSet.show();/*+---+---+----------+------+--------+| id|qty|totalPrice|userId|userName|+---+---+----------+------+--------+|  1|3.0|      80.0|     1|    Join||  2|3.0|      50.0|     1|    Join||  3|3.0|     200.0|     2|   Jeffy||  4|3.0|     222.0| 99999|  zombie|+---+---+----------+------+--------+*///2: 用agg来将分组函数聚合起来一起查询ordersDataSet.groupBy("userId").agg(avg("totalPrice"),max("totalPrice"),min("totalPrice"),sum("totalPrice")).show();/*+------+---------------+---------------+---------------+---------------+|userId|avg(totalPrice)|max(totalPrice)|min(totalPrice)|sum(totalPrice)|+------+---------------+---------------+---------------+---------------+|     1|           65.0|           80.0|           50.0|          130.0|| 99999|          222.0|          222.0|          222.0|          222.0||     2|          200.0|          200.0|          200.0|          200.0|+------+---------------+---------------+---------------+---------------+*/Map<String, String> map = new HashMap<>();map.put("totalPrice", "avg");map.put("totalPrice", "max");map.put("totalPrice", "min");map.put("totalPrice", "sum");ordersDataSet.groupBy("userId").agg(map).show();/*+------+---------------+|userId|sum(totalPrice)|+------+---------------+|     1|          130.0|| 99999|          222.0||     2|          200.0|+------+---------------+*///对整个orders进行聚合计算ordersDataSet.agg(avg("totalPrice"),max("totalPrice"),min("totalPrice"),sum("totalPrice")).show();/*+---------------+---------------+---------------+---------------+|avg(totalPrice)|max(totalPrice)|min(totalPrice)|sum(totalPrice)|+---------------+---------------+---------------+---------------+|          138.0|          222.0|           50.0|          552.0|+---------------+---------------+---------------+---------------+*/ordersDataSet.agg(map).show();/*+---------------+|sum(totalPrice)|+---------------+|          552.0|+---------------+*/}
}

 


https://dhexx.cn/news/show-18299.html

相关文章

SpringBoot整合lettuce+RedissonSentinel(哨兵模式)

SpringBoot整合lettuceRedissonSentinel&#xff08;哨兵模式&#xff09;一、配置准备1、Pom依赖2、application3、实体类4、测试代码5、效果一、配置准备 哨兵模式安装参考我之前的博客 链接地址 1、Pom依赖 <dependencies><!--redis设置--><dependency>…

C++大数类模板

友情提示&#xff1a;使用该模板的注意了&#xff0c;在大数减法里有一个小错误&#xff0c;导致减法可能会出错 // 原来的写法&#xff0c;将t1.len错写成了len while(t1.a[len - 1] 0 && t1.len > 1) {t1.len--; big--; }// 改正后 while(t1.a[t1.len - 1] 0 &…

matlab 中txt文件(含字符及数值)处理

matlab 中txt文件&#xff08;含字符及数值&#xff09;处理 (2008-08-02 09:45:12) 转载▼标签&#xff1a; 杂谈 分类&#xff1a; matlab及C学习Matlab文件操作及读txt文件ZZ2008-07-11 16:43matlab文件操作文件操作是一种重要的输入输出方式&#xff0c;即从数据文件读取…

HDU 4662 MU Puzzle 数论或者水题

题目链接&#xff1a; http://acm.hdu.edu.cn/showproblem.php?pid4662 题目是问目标串能否由MI得到&#xff0c;我们可以逆向思维&#xff0c;目标串能否反过来处理得到MI&#xff0c;所以&#xff0c;首先排除M没有出现或者出现超过一次&#xff0c;或者只出现了一次但没有出…

Linux服务器使用Scp命令将数据拉取和接收到远程服务器

文章目录一、介绍1、命令格式2、命令功能二、从本地服务器复制到远程服务器1、复制文件2、复制文件实践案例3、复制目录4、复制目录实践案例三、从远程服务器复制到本地服务器四、其他1、指定端口一、介绍 1、命令格式 scp [参数] [原路径] [目标路径]2、命令功能 scp是 sec…

Jmeter压测工具入门测试使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、jmter的用法1、下载与使用2、创建线程计划和线程组3、添加post请求3、添加get请求二、压测结果的分析一、jmter的用法 1、下载与使用 下载地址 解压缩双击打开…

Linux下使用Crontab定时执行脚本及多种案例

Linux下使用Crontab定时执行脚本及多种案例一、安装与基本语法1、安装2、语法3、时间二、案例1、定时输出任务2、定时清空日志一、安装与基本语法 1、安装 yum -y install vixie-cron yum install crontabs2、语法 crontab -e #: 修改 crontab 文件&#xff0c;如果文件不…

怎样安装和制作淘宝店铺装修挂件

步骤/方法 1下载PS一定要带有ImageRead的哦.先找出一张图片,矽矽这次选择的是一张狗狗,您也可以选择其他的.....做法都一样的.2双击背景图层的小锁.然后就变成了图层0,这个时候我们需要把狗狗白色背景扣掉.用魔术棒吧,对着白色背景点一下,然后按下键盘上的Delete,就干净 了.(注…

Java正则表达式入门学习与实践

Java正则表达式入门学习与实践一、正则基础知识点1、元字符2、重复限定符3、分组4、转义5、条件或6、区间二、正则进阶知识点1、零宽断言2、零宽断言测试3、捕获和非捕获3、反向引用三、贪婪和非贪婪1、贪婪2、懒惰&#xff08;非贪婪&#xff09;四、反义五、 案例1、匹配时间…

Java:集合,Collection接口框架图

Java集合大致可分为Set、List和Map三种体系&#xff0c;其中Set代表无序、不可重复的集合&#xff1b;List代表有序、重复的集合&#xff1b;而Map则代表具有映射关系的集合。Java 5之后&#xff0c;增加了Queue体系集合&#xff0c;代表一种队列集合实现。 Java集合框架主要由…