《零基础入门Spark》学习笔记 Day 07

数据转换

对于DataFrame之上的数据处理,Spark SQL支持两类开发入口:一类结构化查询语句:SQL;一类DataFrame开发算子,两者差不多,取决个人的开发习惯。

SQL语句

对于DataFrame,可以使用createTempView或createGlobalTempView在Spark SQL中创建临时数据表,前者创建的的临时表,生命周期限于SparkSession内部,后者可以在同一个应用程序中跨SparkSession访问。DataFrame之间的转换属于延迟计算,仅出现Action类算子时,所有之前的转换过程才会交付执行。

Spark SQL采用ANTLR语法解析器,来解析和处理SQL语句,Oracle、Presto、Hive、ES等数据仓库和计算引擎,因此,在Hive或Presto的查询语句,可以平滑地迁移到Spark SQL,而且Spark SQL提供大量内置函数,如array_distinct、collect_list,非常适合数据检索、数据分析的数据应用场景,而且学习路径短,成本低。

Spark SQL内置函数主要分为以下几类:

聚合函数

用于对一组值执行计算并返回单个值,例如:

  • count():计数
  • sum():求和
  • avg():平均值
  • max()/min():最大/最小值
  • collect_list():收集值到数组(保留重复项)
  • collect_set():收集值到数组(去重)

数学函数

用于数值计算,例如:

  • abs():绝对值
  • sqrt():平方根
  • exp()/log():指数/对数
  • sin()/cos():三角函数
  • round():四舍五入
  • rand():随机数生成

字符串函数

用于字符串操作,例如:

  • concat():字符串拼接
  • substring():截取子串
  • trim():去除空格
  • lower()/upper():大小写转换
  • regexp_extract():正则提取
  • split():按分隔符拆分

日期时间函数

用于处理日期和时间,例如:

  • current_date():当前日期
  • date_add()/date_sub():日期加减
  • year()/month()/day():提取日期部分
  • unix_timestamp():转换为Unix时间戳
  • from_unixtime():Unix时间戳转日期

条件函数

用于逻辑判断,例如:

  • coalesce():返回第一个非空值
  • ifnull()/nullif():空值处理
  • case when:条件表达式
  • greatest()/least():返回最大/最小值

窗口函数

用于分组计算,例如:

  • row_number():行号
  • rank()/dense_rank():排名
  • lead()/lag():访问前后行
  • first_value()/last_value():首尾值

DataFrame算子

DataFrame的算子分六类:RDD同源类算子、探索类算子、清洗类算子、转换类算子、分析类算子和持久化算子

一、RDD同源类算子

算子用途 算子
数据转换 map/mapPartition/flatMap/filter
数据聚合 groupByKey/reduce
数据准备 union/sample
数据预处理 repartition/coalesce
结构收集 first/take/collect

二、探索类算子

算子用途 算子
查看数据模式 columns/schema/printSchema
查看数据的"模样" show
查看数据分布 describe
查看数据的执行计划 explain

三、清洗类算子

算子 算子含义
drop 删除掉DataFrame的列数据
distinct 去重
dropDuplicates 按照指定列去重
na null值处理

四、转换类算子

算子 算子含义
select 按照列名对数据做投影
selectExpr 以SQL语句为参数生成,提取数据
where 以SQL语句为参数做数据过滤
withColumnRenamed 字段重命名
withColumn 生成新的数据列
explode 展开数组类的数据列

五、分析类算子

算子 算子含义
join 两个DataFrame之间做数据关联
groupBy 按照某些列对数据做分组
agg 分组后做数据聚合,Spark SQL支持丰富的聚合算子
sort/orderBy 按照某些列做排序

六、持久化类算子

写入模式 含义
Append 以追加的方式写入数据
Overwrite 以覆盖的方式写入数据
ErrorlfExists 如果目标存储路径已存在,则报异常
Ignore 如果目标存储路径已存在,则放弃数据写入
相关推荐
xiaotao13110 小时前
02-机器学习基础: 监督学习——线性回归
学习·机器学习·线性回归
墨黎芜11 小时前
ArcGIS从入门到精通——地图符号、注记的初步使用
学习·arcgis·信息可视化
小李云雾11 小时前
FastAPI重要知识点---中间件(Middleware)
学习·程序人生·中间件·fastapi·middleware
.Cnn11 小时前
JavaScript 前端基础笔记(网页交互核心)
前端·javascript·笔记·交互
小夏子_riotous11 小时前
Docker学习路径——3、常用命令
linux·运维·服务器·学习·docker·容器·centos
STLearner11 小时前
WSDM 2026 | 时间序列(Time Series)论文总结【预测,表示学习,因果】
大数据·论文阅读·人工智能·深度学习·学习·机器学习·数据挖掘
redaijufeng12 小时前
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
爬虫·学习·selenium
九成宫12 小时前
IT项目管理期末复习——Chapter 10 项目沟通管理
笔记·项目管理·软件工程
腾科IT教育12 小时前
零基础快速上岸HCIP,高效学习思路分享
学习·华为认证·hcip·hcip考试·hcip认证
234710212712 小时前
4.14 学习笔记
笔记·python·学习