《零基础入门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 如果目标存储路径已存在,则放弃数据写入
相关推荐
贺小涛2 小时前
STM32学习
stm32·单片机·学习
sensen_kiss2 小时前
CAN302 电子商务技术 Pt.2 深入了解HTML和CSS
前端·css·学习·html
野木香2 小时前
fnm在win10下安装配置
运维·学习
Cathy Bryant2 小时前
拓扑学:曲面与圆环
笔记·线性代数·矩阵·拓扑学
凉、介2 小时前
SylixOS 多核启动
服务器·笔记·学习·嵌入式·sylixos
Yu_Lijing3 小时前
基于C++的《Head First设计模式》笔记——原型模式
c++·笔记·设计模式
猹叉叉(学习版)3 小时前
【系统分析师_知识点整理】 8.项目管理
笔记·项目管理·软考·系统分析师
hssfscv3 小时前
软件设计师 试题三 面向对象——UML事物、关系、图
笔记·学习·uml
EnglishJun3 小时前
ARM嵌入式学习(十三)--- IMX6ULL串口
arm开发·学习