Spark SQL 基本操作

2023-10-26

将下列JSON格式数据复制到Linux系统中,并保存命名为employee.json。

{ "id":1 , "name":" Ella" , "age":36 }

{ "id":2, "name":"Bob","age":29 }

{ "id":3 , "name":"Jack","age":29 }

{ "id":4 , "name":"Jim","age":28 }

{ "id":4 , "name":"Jim","age":28 }

{ "id":5 , "name":"Damon" }

{ "id":5 , "name":"Damon" }

为employee.json创建DataFrame,并写出Python语句完成下列操作:

  1. 查询所有数据;
  2. 查询所有数据,并去除重复的数据;
  3. 查询所有数据,打印时去除id字段;
  4. 筛选出age>30的记录;
  5. 将数据按age分组;
  6. 将数据按name升序排列;
  7. 取出前3行数据;
  8. 查询所有记录的name列,并为其取别名为username;
  9. 查询年龄age的平均值;
  10. 查询年龄age的最小值。
from pyspark.sql import SparkSession

# 创建SparkSession对象
spark = SparkSession.builder.appName("Employee").getOrCreate()

# 读取JSON文件并创建DataFrame
df = spark.read.json("file:///opt/module/spark-3.0.3-bin-without-hadoop/mycode/employee.json")

# (1) 查询所有数据
df.show()

# (2) 查询所有数据,并去除重复的数据
df_drop_duplicates = df.dropDuplicates()
df_drop_duplicates.show()

# (3) 查询所有数据,打印时去除id字段
df_no_id = df.select([c for c in df.columns if c != "id"])
df_no_id.show()

# (4) 筛选出age>30的记录
df_age_gt_30 = df.filter(df.age > 30)
df_age_gt_30.show()

# (5) 将数据按age分组
df_grouped_by_age = df.groupBy("age").count().show()

# (6) 将数据按name升序排列
df_sorted_by_name = df.orderBy("name")
df_sorted_by_name.show()

# (7) 取出前3行数据
df_first_3_rows = df.limit(3)
df_first_3_rows.show()

# (8) 查询所有记录的name列,并为其取别名为username
df_username = df.select(df["name"].alias("username"))
df_username.show()

# (9) 查询年龄age的平均值
mean_age = df.agg({"age": "avg"}).collect()[0][0]
print(mean_age)

# (10) 查询年龄age的最小值
min_age = df.agg({"age": "min"}).collect()[0][0]
print(min_age)

python3 ans3.py

(1) 

(2)  

(3)  

(4)  

(5)  

(6)  

(7)  

(8)  

(9)  

 (10) 

 总结

  1.  通过查阅博客了解了agg方法可以接收多个聚合函数作为参数,也可以使用字典或多个键值对来指定要聚合的列以及聚合函数。它返回一个DataFrame,其中包含所有指定列的聚合结果。在例如计算平均值时,可以使用agg方法。第二个方法是使用groupBy方法对DataFrame进行分组,然后使用avg方法计算分组后每组age列的平均值,最后使用select方法选择要返回的列,并使用collect方法获取计算结果并转换为一个列表。由于只有一个分组并且只有一个聚合函数,因此列表中只有一个元素。使用索引[0]获取这个元素,然后使用asDict方法将其转换为字典。最后,使用字典的键'avg(age)'获取平均值聚合结果。
  2.  编程中也遇到很多问题,如:在数据需要去重时。可以使用Spark提供的dropDuplicates函数进行去重。distinct也是用来去重的,区别是distinct是根据每一条数据进行完整的比对和去重,dropDuplicates可以根据指定的字段进行去重。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark SQL 基本操作 的相关文章

随机推荐

  • vscode运行命令是报错:标记“&&”不是此版本中的有效语句分隔符。

    问题截图 问题原因 这个问题的原因和你运行的什么脚本语言没关系 即与 py c cpp无关 和你在那个终端运行的有关 解决方法 第一步 点击向下箭头 并选择 选择默认配置文件 第二步 选择 Windows PowerShell 第三步 关闭
  • 数字IC手撕代码-边沿检测(上升沿、下降沿、双边沿)

    前言 本专栏旨在记录高频笔面试手撕代码题 以备数字前端秋招 本专栏所有文章提供原理分析 代码及波形 所有代码均经过本人验证 目录如下 1 数字IC手撕代码 分频器 任意偶数分频 2 数字IC手撕代码 分频器 任意奇数分频 3 数字IC手撕代
  • 2021羊城杯CTF wp

    2021羊城杯 部分 wp Web web1 only 4 web2 EasyCurl web3 Checkin Go web4 Cross The Side Re Pwn BabyRop Crypto Miss bigrsa Misc M
  • FISCO-BCOS如何把WEBASE部署通过的合约方法由api在前端调用

    参考文章 fisco bcos官方文档第五章部分 通过POST请求 数据格式要为json 调用hello合约中的get方法 按要求填写需要的信息
  • 决策树的学习

    决策树 从名字上看 就知道其模型的结构为树结构 决策树既可以用于分类 也可以用于回归之中 在分类问题中 我们可以认为其是if then规则的集合 也可以认为是定义在特征空间与类空间上的条件概率分布 在学习过程中 利用训练数据和损失函数最小化
  • 因果推理的do算子

    在因果推理中 我们一般都需要首先构建一个因果图 这是后续进行因果分析的基础 但是在现阶段笔者的知识看来 因果图的构建其实是一个比较主观的过程 但偏偏又是后续分析的基础 所以略感头疼 在构建因果图前 我们有必要明白 什么是因果关系 通俗来说
  • 【JUC并发编程】

    本笔记内容为狂神说JUC并发编程部分 目录 一 什么是JUC 二 线程和进程 1 概述 2 并发 并行 3 线程有几个状态 4 wait sleep 区别 三 Lock锁 重点 四 生产者和消费者问题 五 八锁现象 六 集合类不安全 七 C
  • 统计字符串中,中文字符、英文字符和数字字符的数量

    package com suanfa public class ZYSTotal 统计字符串中 中文字符 英文字符和数字字符的数量 public static void main String args int englishCount 0
  • 指针和数组的相关练习题

    目录 一 一维数组 二 字符数组 三 二维数组 注意 假设本练习题所用的VS编译器是64位平台下的 首先要明白数组名的意义 1 sizeof 数组名 这里的数组名表示整个数组 计算的是整个数组的大小 2 数组名 这里的数组名表示整个数组 取
  • 帆软之图表详解

    帆软之图表详解 饼图 饼图 玫瑰图 玫瑰图和饼图类似 仅选择不同的图例即可 多分类饼图 注 标题居中不是直接显示标题居中 而是隐藏标题偶按照下面的方法将标题加上去 柱状图 柱状图设置柱子宽度 boby 样式 系列 固定柱宽 注意事项 问题描
  • 4.3寸串口屏在智能炒菜机上应用分享

    现代人追求高效品质生活的美好愿望以及社会科技的不断发展持续推动着一种新兴经济形态的出现 即懒人经济 懒人经济的崛起也成为智能家电行业新的增长引擎 自动炒菜机便是这一经济形态下的产物 对于很多居住于快节奏生活的一二线城市人来说 在辛苦工作一整
  • vue3 递归无限分类树型菜单+搜索功能

    我们先来看一下大致实现效果 数据可以无限向下增加 搜索关键字会自动展开数据 vue3树形结构菜单 搜索 首先我这个需要自己设计数据源 一定要先搞清楚数据是什么结构才能顺利开展下一步 有接口的同学可以忽略这一步 其中children顾名思义
  • 区块链是如何做到交易记录不可被篡改的

    区块链是如何做到交易记录不可被篡改的 星目 关注 2017 07 19 23 03 字数 1912 阅读 1654评论 4喜欢 1 BlockChain 比特币前一阵子一度超过2万元一枚 而且长期来看这远远不是它的极限 假如你手里有比特币
  • Python实现队列

    Python实现队列 关于队列的介绍 请参考 https blog csdn net weixin 43790276 article details 104033337 队列的数据存储结构可以是顺序表 也可以是链表 本篇使用 Python
  • Keil中工程文件编译后没有显示.h文件

    一 第一种解决方法 打开Keil软件 重新打开试试 二 第二种解决方法 查看是否点击了Show include File Dependencies 1 右击源组 记住 一定是右击 不是双击 就可以看到如下画面 如果你没有打勾的话 那就是如下
  • 开源项目哪家强?Github年终各大排行榜超级盘点(内附开源项目学习资源)

    整理 Jane 出品 AI科技大本营 导语 提到开源项目 2018 年注定是不平凡的一年 据 Octoverse 报告数据 仅在 2018 年 Github 上的新用户就比过去六年的用户总数还要多 存储库数量近一亿 这些增长都要归功于开源社
  • Linux 系统中kill命令杀死进程常用技巧

    目录 前言 基础 进阶 1 查找进程号的方式进行改进 2 将常规的两步杀死进程合并为一步 3 强制踢掉登陆用户 kill的注意事项 前言 在Linux的系统中 kill是我们最常见的命令之一 kill 英语中为杀死的意思 顾名思义 就是用来
  • pytorch中使用detach()

    import torch nn as nn import torch class net nn Module def init self super init self conv nn Conv2d 3 6 3 stride 2 paddi
  • GOOGLE地图基站定位-Google Mobile Maps API

    如果你在你的手机装过Google Mobile Maps 你就可以发现只要你的手机能连接GPRS 即使没有GPS功能 也能定位到你手机所在的位置 只是精度不够准确 在探讨这个原理之前 我们需要了解一些移动知识 了解什么是MNC LAC Ce
  • Spark SQL 基本操作

    将下列JSON格式数据复制到Linux系统中 并保存命名为employee json id 1 name Ella age 36 id 2 name Bob age 29 id 3 name Jack age 29 id 4 name Ji