李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
04.DataFrame常用API
Leefs
2021-07-16 PM
1995℃
0条
# 04.DataFrame常用API ### 一、介绍 Spark SQL中的DataFrame类似于一张关系型数据表。在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现。可以参考,Scala提供的[DataFrame API](http://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.sql.Dataset)。 ### 二、DataFrame操作 #### 2.1 Action操作 | 方法 | 说明 | | ----------------------- | ------------------------------------------------------------ | | collect() | 返回值是一个数组,返回dataframe集合所有的行 | | collectAsList() | 返回值是一个Java类型的数组,返回dataframe集合所有的行 | | count() | 返回一个number类型的,返回dataframe集合的行数 | | describe(cols: String*) | 返回一个通过数学计算的类表值(count, mean, stddev, min, and max),这个可以传多个参数,中间用逗号分隔,如果有字段为空,那么不参与运算,只这对数值类型的字段。例如df.describe("age", "height").show() | | first() | 返回第一行 ,类型是row类型 | | head() | 返回第一行 ,类型是row类型 | | head(n:Int) | 返回n行 ,类型是row 类型 | | show() | 返回dataframe集合的值默认是20行,返回类型是unit | | show(n:Int) | 返回n行,返回值类型是unit | | table(n:Int) | 返回n行,类型是row 类型 | #### 2.2 DataFrame基本操作 | 方法 | 说明 | | ------------------------------------------ | ------------------------------------------------------------ | | cache() | 同步数据的内存 | | columns | 返回一个string类型的数组,返回值是所有列的名字 | | dtypes | 返回一个string类型的二维数组,返回值是所有列的名字以及类型 | | explan() | 打印执行计划 物理的 | | explain(n:Boolean) | 输入值为 false 或者true ,返回值是unit 默认是false ,如果输入true将会打印 逻辑的和物理的 | | isLocal | 返回值是Boolean类型,如果允许模式是local返回true否则返回false | | persist(newlevel:StorageLevel) | 返回一个dataframe.this.type 输入存储模型类型 | | printSchema() | 打印出字段名称和类型 按照树状结构来打印 | | registerTempTable(tablename:String) | 返回Unit ,将df的对象只放在一张表里面,这个表随着对象的删除而删除了 | | schema | 返回structType 类型,将字段名称和类型按照结构体类型返回 | | toDF() | 返回一个新的dataframe类型的 | | toDF(colnames:String*) | 将参数中的几个字段返回一个新的dataframe类型 | | unpersist() | 返回dataframe.this.type 类型,去除模式中的数据 | | unpersist(blocking:Boolean) | 返回dataframe.this.type类型 true 和unpersist是一样的作用false 是去除RDD | | toJSON() | 把DataFrame转化为一个RDD字符串,每一行json数据对应RDD的每一条Row | | createTempView(name:String) | 把DataFrame注册临时视图,临时视图的生存时间取决于创建此DataFrame的SparkSession,如果此视图的name已经存在抛出TempTableAlreadyExistsException的异常 | | createOrReplaceTempView(name:String) | 创建或者替换视图,和 createTempView一样只是视图名称存在时不会抛出异常会取代之前的视图 | | createGlobalTempView(name:String) | 为DataFrame创建一个全局视图,此视图的生命周期取决于此Spark application,已存在是会抛出异常 | | createOrReplaceGlobalTempView(name:String) | 为DataFrame创建活替换一个全局视图,此视图的生命周期取决于此Spark application,已存在不会抛出一样 会取代之前的视图 | #### 2.3 结构化查询 DataFrame非常类似我们数据库中的表,可以在DataFrame上进行很多SQL类的操作。 | 方法 | 说明 | 示例 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | | agg(expers:column*) | 返回dataframe类型 ,同数学计算求值 | df.agg(max("age"), avg("salary"))
df.groupBy().agg(max("age"),avg("salary")) | | agg(exprs:Map[String, String]) | 返回dataframe类型 ,同数学计算求值 map类型 | df.agg(Map("age" -> "max", "salary" -> "avg"))
df.groupBy().agg(Map("age" -> "max", "salary" -> "avg")) | | agg(aggExpr: (String, String), aggExprs: (String, String)*) | 返回dataframe类型 ,同数学计算求值 | df.agg(Map("age" -> "max", "salary" -> "avg"))
df.groupBy().agg(Map("age" -> "max", "salary" -> "avg")) | | apply(colName: String) | 返回column类型,捕获输入进去列的对象 | | | as(alias: String) | 返回一个新的dataframe类型,就是原来的一个别名 | | | col(colName: String) | 返回column类型,捕获输入进去列的对象 | | | cube(col1: String, cols: String*) | 返回一个GroupedData类型,根据某些字段来汇总 | | | distinct | 去重 返回一个dataframe类型 | | | drop(col: Column) | 删除某列 返回dataframe类型 | | | dropDuplicates(colNames: Array[String]) | 删除相同的列 返回一个dataframe | | | except(other: DataFrame) | 返回一个dataframe,返回在当前集合存在的在其他集合不存在 | | | explode[A, B](inputColumn: String, outputColumn: String)(f: (A) ⇒ TraversableOnce[B])(implicit arg0: scala.reflect.api.JavaUniverse.TypeTag[B]) | 返回值是dataframe类型,这个 将一个字段进行更多行的拆分 | `df.explode("name","names") {name :String=> name.split(" ")}.show();`
将name字段根据空格来拆分,拆分的字段放在names里面 | | filter(conditionExpr: String) | 刷选部分数据,返回dataframe类型 | df.filter("age>10").show(); df.filter(df("age")>10).show(); df.where(df("age")>10).show(); | | groupBy(col1: String, cols: String*) | 根据某写字段来汇总返回groupedate类型 | df.groupBy("age").agg(Map("age" ->"count")).show();
df.groupBy("age").avg().show() | | intersect(other: DataFrame) | 返回一个dataframe,在2个dataframe都存在的元素 | | | join(right: DataFrame, joinExprs: Column, joinType: String) | 一个是关联的dataframe,第二个关联的条件,第三个关联的类型:inner, outer, left_outer, right_outer, leftsemi | df.join(ds,df("name")===ds("name") and df("age")===ds("age"),"outer").show(); | | limit(n: Int) | 返回dataframe类型 去n 条数据出来 | | | na: DataFrameNaFunctions | 可以调用dataframenafunctions的功能区做过滤 df.na.drop().show(); 删除为空的行 | | | orderBy(sortExprs: Column*) | 做alise排序 | | | select(cols:string*) | dataframe 做字段的刷选 | df.select($"colA", $"colB" + 1) | | selectExpr(exprs: String*) | 做字段的刷选 | df.selectExpr("name","name as names","upper(name)","age+1").show(); | | sort(sortExprs: Column*) | 排序,默认是asc | df.sort(df("age").desc).show(); | | unionAll(other:Dataframe) | 合并 | df.unionAll(ds).show(); | | withColumnRenamed(existingName: String, newName: String) | 修改列表 | df.withColumnRenamed("name","names").show(); | | withColumn(colName: String, col: Column) | 增加一列 | df.withColumn("aa",df("name")).show(); | | exceptAll | 返回一个新的DataFrame,包含这个DataFrame的row但不在另一个DataFrame的row中,也作为SQL的标准,解决按列的位置而不是通过name | df1.exceptAll(df2).show() | | toLocalIterator | 返回一个包含DataFrame所有Row的迭代器,迭代器将使用尽可能多的内存在这个DataFrame最大的分区 通过预读数据,他可能超过2个最大内存分区 | list(df.toLocalIterator()) |
标签:
Spark
,
Spark SQL
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1335.html
上一篇
03.IDEA创建SparkSQL环境对象
下一篇
05.【转载】Dataset (DataFrame) 的基础操作(一)
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
并发编程
Flume
持有对象
JavaSE
JVM
Kafka
Spark Core
Spring
数学
SpringBoot
Map
Spark RDD
Tomcat
Http
排序
Zookeeper
Python
Shiro
LeetCode刷题
查找
Scala
Typora
随笔
队列
递归
Linux
nginx
gorm
散列
Spark
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭