博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark SQL函数API
阅读量:3958 次
发布时间:2019-05-24

本文共 1992 字,大约阅读时间需要 6 分钟。

创建DF

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

DSL函数

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

使用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) substring
str
中第一次出现的位置
 
length(e: Column) 
字符串长度
 
 
locate(substr: String, str: Column, pos: Int): substring
str
中第一次出现位置,
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

RDDDataSet

二者关系如下图,DataSet
不如
DataFrame
灵活
DataSet
是数据类型安全的类。
DataFrame
没有类型,只有字段的定义
 
 
RDD调用toDS转为DataSet类型
 
 
 
你可能感兴趣的文章