欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spark SQL函数API

程序员文章站 2022-06-01 16:06:21
...

创建DF

RDD转DF
 
toDF转为DataFrame,toDF的参数是String类型的变长参数
 
Spark SQL函数API
 
使用名称数组
 
Spark SQL函数API
 
使用createDataFrame创建指定文件类型创建DF
 
Spark SQL函数API
 
指定文件类型创建DF
 
spark表示sparkSession,因为Json自带属性名和属性值,可直接获得schema
 
Spark SQL函数API
 
指定schema创建dfs
 
对于csv,txt格式,可以指定分隔符和schema
 
Spark SQL函数API
 
DF的特征方法
 
df.printSchema 显示schema
 

DSL函数

1、select 
 
import spark.implicits._  
 
df1.select($"name", $"age"+1).show
 
2、wherefilter
 
df.select($"name", $"age").filter($"age">20).show
 
3、groupBy
 
df.select("age").filter($"age">20).groupBy("age").count.show
 
4、orderBy
 
Spark SQL函数API
 
5、head,take,first
 
Spark SQL函数API
 
6、join
 
更多种join内容,参见https://blog.csdn.net/timothyzh/article/details/89919157
 
Spark SQL函数API
 

使用SQL语句

DF使用sql语句,需要创建一个临时视图
 
1、临时视图
 
df1.createOrReplaceTempView("people")
spark.sql("select age from people where age is not null group by age").show

2、全局临时视图

df.createGlobalTempView("people")
spark.newSession().sql("SELECT * FROM global_temp.people").show()

全局临时视图可跨session使用,保存在数据库global_temp中

聚合函数

count_distinct 近似值
 
avg mean 平均值
 
collect_list 聚合指定字段的值到list
 
collect_set 聚合指定字段的值到set
 
countDistinct 去重计数
 
select count(distinct class) 去重计数
 
first 分组第一个元素
 
last 分组最后一个元素
 
grouping sets 等同于group by A,B union group by A,C
 
max 最大值
 
min 最小值
 
sum 求和
 
sumDistinct
 
select sum(distinct class)  非重复值求和
 

字符串函数

concat(exprs: Column*) 连接多列字符串
 
initcap(e: Column) 单词首字母大写
 
upper(e: Column) 转大写
 
instr(str: Column, substring: String) substringstr中第一次出现的位置
 
length(e: Column) 字符串长度
 
 
locate(substr: String, str: Column, pos: Int): substringstr中第一次出现位置,0表示未找到,从pos位置后查找
 
 
trim(e: Column):剪掉左右两边的空格、空白字符
 
regexp_replace(e: Column, pattern: Column, replacement: Column): 正则替换匹配的部 分,这里参数为列
 
reverse(str: Column) str反转
 

窗口函数

窗口函数在是聚合函数后面使用over()标记要使用窗口功能,填写partition by指明分区,使用order by指明排序,over函数
外面指明需要返回哪些值
 
rank() 排名,返回数据项在分组中的排名,排名相等会在名次中留下空位 1,2,2,4
 
dense_rank() 排名,返回数据项在分组中的排名,排名相等会在名次中不会留下空位
 
row_number():行号,为每条记录返回一个数字 1,2,3,4
 
spark.sql("select name,age rank() over(partition by name order by age) as rank  from global_temp.Human").show
 
 

自定义UDF

Spark SQL函数API

RDDDataSet

二者关系如下图,DataSet不如DataFrame灵活
DataSet是数据类型安全的类。DataFrame没有类型,只有字段的定义
 
Spark SQL函数API
 
RDD调用toDS转为DataSet类型
 
Spark SQL函数API
 
 
相关标签: SparkSql