PySpark之SparkSQL DataFrame的语法函数

一、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()
        在这里插入图片描述

在这里插入图片描述

三、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中可用

五、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.confspark.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"

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值