一、DataFrame的两种编程风格
- DSL语法风格
- DSL称之为:领域特定语言
- 其实就是指DataFrame的特有API
- DSL风格意思就是以调用API的方式来处理Data
- 比如:df.where().limit()
- SQL语法风格
- SQL风格就是使用SQL语句处理DataFrame的数据
- 比如:spark.sql(“SELECT * FROM xxx)
二、DSL风格
-
show方法:
- 功能:展示DataFrame中的数据,默认20条
- df.show(参数1, 参数2)
- 参数1: 默认是20, 控制展示多少条
- 参数2: 是否阶段列, 默认只输出20个字符的长度, 过长不显示, 要显示的话 请填入 truncate = True
-
printSchema方法:
- 功能:打印输出df的schema信息
- 语法:df.printSchema()
-
select方法:
-
功能:选择DataFrame中的指定列(通过传入参数进行指定)
-
语法:
-
-
可传递:
- 可变参数的cols对象,cols对象可以是Column对象来指定列或者字符串列名来指定列
- List[Column]对象或者List[str]对象, 用来选择多个列
-
filter和where方法:
- 功能:过滤DataFrame内的数据,返回一个过滤后的DataFrame
- 语法:
- df.filter()
- df.where()
- where和filter功能上是等价的
-
groupBy 分组方法:
- 功能:按照指定的列进行数据的分组, 返回值是GroupedData对象
- 语法:
- df.groupBy()
- df.groupBy()
三、SQL风格
- 注册DataFrame成为表
-
使用SQL查询
- 通过sparksession.sql(sql语句)来执行sql查询,返回值是一个新的df
# 注册好表后,就可以写sql查询 df2 = spark.sql("""SELECT * FROM score WHERE score < 99""") df2.show()
四、DataFrame的全局表和临时表
- 全局表
- 跨SparkSession对象使用,在一个程序内的多个SparkSession中均可调用,查询前带上前缀:
global_temp
- 跨SparkSession对象使用,在一个程序内的多个SparkSession中均可调用,查询前带上前缀:
- 临时表
- 只在当前SparkSession中可用
五、pyspark.sql.functions包
- 这个包里面提供了一些列的计算函数供SparkSQL使用
- ```from pyspark.sql import functions as F`
- 返回值多数都是Column对象
六、SparkSQL Shuffle分区数目
在SparkSQL中当Job中产生Shuffle时,默认的分区数(spark.sql.shuffle.partitions)为200,在实际项目中要合理的设置
-
配置文件:
conf/spark-defaults.conf
:spark.sql.shuffle.partitions 100
-
在客户端提交参数中:
bin/spark-submit --conf "spark.sql.shuffle.partitions=100"
-
在代码中可以设置:
spark = SparkSession.builder.appName("create df").master("loacl[*]").config("spark.sql.shuffle.partitions"