《零基础入门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 如果目标存储路径已存在,则放弃数据写入
相关推荐
棣廷1 小时前
初识Spark Core
大数据·分布式·spark
摇滚侠8 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
小向是个Der8 小时前
嵌入式进阶——MCU上电后的动作
c语言·单片机·mcu·学习·链接脚本
silvamux_11 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
蒸蒸yyyyzwd11 小时前
kafka、redis、mysql不熟悉问题总结
笔记·八股
hgy896911 小时前
深度学习(小白笔记)——迁徙
人工智能·笔记·深度学习
摇滚侠12 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 11
java·笔记·python
辣知13 小时前
辣知·化智93 被历史尘封的鬻子
学习
每天题库14 小时前
西藏安全员 A 证备考真题题库 强化重点知识刷题提升通过率
学习·安全·考试·题库·考证
Be for thing14 小时前
PyTorch基础|Tensor张量详解,张量创建、数据类型与常用操作
pytorch·学习·1024程序员节