《零基础入门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 如果目标存储路径已存在,则放弃数据写入
相关推荐
yi0117 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
志尊宝8 小时前
Vue3 零基础每日笔记(073):keep-alive 页面缓存实战——列表页返回不丢状态
vue.js·笔记·缓存·#vue #前端 #前端开发·#javascript·#vue.js
李日华大战鸡红9 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
weixin_448119949 小时前
Datawhale Easy Data × AI:笔记1 已重做,看新的笔记
笔记
要开心吖ZSH10 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
kkkkkkkkkk_Z11 小时前
新手自学嵌入式 | 学习日记:异常与中断基础、i.MX6ULL裸机开发环境搭建、GPIO模块与点灯原理
学习
咖啡忍者11 小时前
【SAP】程制造生产计划PP-PI(Production Planning for Process Industries)
笔记
m4Rk_11 小时前
【论文阅读】Agent 记忆机制(94):MemGen——在推理过程中动态生成并织入潜在记忆
论文阅读·人工智能·学习·开源·github
晓德12 小时前
0、LLM大模型安全学习系列(启)
学习·安全
Titan202412 小时前
MySQL索引学习笔记
笔记·学习·mysql