干货 | 您所在的位置:网站首页 › python引用数据 › 干货 |
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 实验室设备网 版权所有 |