干货 您所在的位置:网站首页 python引用数据 干货

干货

2023-03-25 16:09| 来源: 网络整理| 查看: 265

DataFrame支持两种风格进行编程,分别是:

· DSL风格

· SQL风格

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

如图,某个df.show后的展示结果

DSL - printSchema方法

功能:打印输出df的schema信息

语法:

df.printSchema()DSL - select

功能:选择DataFrame中的指定列(通过传入参数进行指定)

语法:

可传递:

· 可变参数的cols对象,cols对象可以是Column对象来指定列或者字符串列名来指定列

· List[Column]对象或者List[str]对象, 用来选择多个列

DSL - filter和where

功能:过滤DataFrame内的数据,返回一个过滤后的DataFrame

语法:

df.filter() df.where()

where和filter功能上是等价的

DSL - groupBy 分组

功能:按照指定的列进行数据的分组, 返回值是GroupedData对象

语法:

df.groupBy()

传入参数和select一样,支持多种形式,不管怎么传意思就是告诉spark按照哪个列分组

GroupedData对象

GroupedData对象是一个特殊的DataFrame数据集

其类全名:

这个对象是经过groupBy后得到的返回值, 内部记录了 以分组形式存储的数据

GroupedData对象其实也有很多API,比如前面的count方法就是这个对象的内置方法

除此之外,像:min、max、avg、sum、等等许多方法都存在

后续会再次使用它

SQL - 注册DataFrame成为表

DataFrame的一个强大之处就是我们可以将它看作是一个关系型数据表,然后可以通过在程序中使用spark.sql() 来执行SQL语句查询,结果返回一个DataFrame。

如果想使用SQL风格的语法,需要将DataFrame注册成表,采用如下的方式:

SQL风格语法 - 使用SQL查询pyspark.sql.functions 包

PySpark提供了一个包: pyspark.sql.functions

这个包里面提供了 一系列的计算函数供SparkSQL使用

如何用呢?

导包

from pyspark.sql import functions as F

然后就可以用F对象调用函数计算了。这些功能函数, 返回值多数都是Column对象.

示例:

详细的函数在后续开发中学习

DataFrame的花式操作代码if __name__ == '__main__': spark = SparkSession.builder.appName('test').getOrCreate() sc = spark.sparkContext # Load a text file and convert each line to a Row. spark = SparkSession.builder.appName('test').getOrCreate() sc = spark.sparkContext # 读取一个文件转化每一行为Row对象 lines = sc.textFile("file:///export/pyfolder1/pyspark-chapter03_3.8/data/sql/people.txt") parts = lines.map(lambda l: l.split(",")) # people = parts.map(lambda p: Row(name=p[0], age=int(p[1]))) personDF = parts.toDF(["name", "age"]) # DSL操作 # 4.1.1 查看DataFrame中的内容,通过调用show方法 personDF.show # 4.1.2 查看DataFrame的Scheme信息 personDF.printSchema() # 4.1.3.1 第一种方式查看name字段数据 personDF.select("name").show() # 4.1.3.2 第二种方式查看name字段数据 personDF.select(personDF['name'], personDF['age'] + 1).show() # 4.1.3.3 第三种方式查看name和age字段数据-此方法不可行 # personDF.select(personDF.col("name"), personDF.col("age")).show # 4.1.3.4 第四种方式查看name和age字段数据-此方法不可行 # personDF.select(personDF.columns["name"], personDF.columns["age"]).show # 4.1.3.5 过滤操作 personDF.filter(personDF['age'] > 21).show() # 4.1.3.6 统计操作 personDF.groupBy("age").count().show() # 5-SQL操作 创建临时试图 # Creates a temporary view using the DataFrame personDF.createOrReplaceTempView("people") # 5.1.1 查看DataFrame中的内容 spark.sql("SELECT * FROM people").show() # 5.1.2 查看DataFrame的Scheme信息 spark.sql("desc people").show() # 5.1.3 查看name字段数据 spark.sql("SELECT name FROM people").show() # 5.1.3 根据age排序的前两个人员信息 spark.sql("select * from people order by age desc limit 2 ").show() # 5.1.4 查询年龄大于30的人的信息 spark.sql("select * from people where age > 15").show()



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有