天天看点

Spark SQL函数API

创建DF

RDD转DF   toDF 转为 DataFrame, toDF 的参数是 String 类型的变长参数  
Spark SQL函数API
  使用名称数组  
Spark SQL函数API
  使用 createDataFrame 创建 指定文件类型创建DF  
Spark SQL函数API
  指定文件类型创建DF   spark 表示sparkSession,因为J son 自带属性名和属性值,可直接获得 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、where 和 filter   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) 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

Spark SQL函数API

RDD转DataSet

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

继续阅读