PySpark|比RDD更快的DataFrame

Posted 数据山谷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PySpark|比RDD更快的DataFrame相关的知识,希望对你有一定的参考价值。

PySpark DataFrame

PySpark|比RDD更快的DataFrame

PySpark操作教程连载(三)

文末附上Pyspark DataFrame操作思维导图


01

DataFrame介绍


DataFrame是一种不可变的分布式数据集,这种数据集被组织指定的列,类似于关系数据库中的表。如果你了解过pandas中的DataFrame,千万不要把二者混为一谈,二者从工作方式到内存缓存都是不同的。

PySpark|比RDD更快的DataFrame

02

DataFrame的作用


对于Spark来说,引入DataFrame之前,Python的查询速度普遍比使用RDD的Scala查询慢(Scala要慢两倍),通常情况下这种速度的差异来源于Python和JVM之间的通信开销。具体的时间差异如下图所示:

PySpark|比RDD更快的DataFrame

由上图可以看到,使用了DataFrame(DF)之后,Python的性能得到了很大的改进,对于SQL、R、Scala等语言的性能也会有很大的提升。

PySpark|比RDD更快的DataFrame

03

创建DataFrame


上一篇中我们了解了如何创建RDD,在创建DataFrame的时候,我们可以直接基于RDD进行转换。示例操作如下

  • spark.read.json()

生成RDD:

stringJSONRDD = sc.parallelize(("""  { "id": "123", "name": "Katie", "age": 19, "eyeColor": "brown" }""", """{ "id": "234", "name": "Michael", "age": 22, "eyeColor": "green" }""",  """{ "id": "345", "name": "Simone", "age": 23, "eyeColor": "blue" }"""))

转换成DataFrame:

swimmersJSON = spark.read.json(stringJSONRDD)
  • createOrReplaceTempView()

我们可以使用该函数进行临时表的创建。

swimmersJSON.createOrReplaceTempView("swimmersJSON")

PySpark|比RDD更快的DataFrame

04

DataFrame查询


我们可以使用DataFrame的API或者使用DataFrame的SQL查询。

  • show()

使用show(n)方法,可以把前n行打印到控制台上(默认显示前十行)。

swimmersJSON.show()
  • collect

使用collect可以返回行对象列表的所有记录。

swimmersJSON.collect()
  • SQL查询

我们可以通过写SQL语句的形式对表格进行查询。

spark.sql("select * from swimmersJSON").collect()

PySpark|比RDD更快的DataFrame

05

DF和RDD的交互操作


  • printSchema()

该方法可以用来打印出每个列的数据类型,我们称之为打印模式。

swimmersJSON.printSchema()
  • StructType()

该方法可以用于编程指定的模式。

schema = StructType([ StructField("id", LongType(), True),  StructField("name", StringType(), True), StructField("age", LongType(), True), StructField("eyeColor", StringType(), True)])
  • createDataFrame(XXRDD, schema)

该方法用于应用指定的schema模式并创建RDD。

swimmers = spark.createDataFrame(stringCSVRDD, schema)

PySpark|比RDD更快的DataFrame

06

利用DataFrame API进行查询


  • count()

用于得到DataFrame的行数。

swimmers.count()
  • 运行筛选语句

我们可以使用filter子句运行筛选语句,用select子句来指定要返回的列。

方法1:

swimmers.select("id", "age").filter("age = 22").show()

方法2:

swimmers.select("name", "eyeColor").filter("eyeColor like 'b%'").show()

PySpark|比RDD更快的DataFrame

07

总结


PySpark|比RDD更快的DataFrame

后台回复DataFrame获取高清大图

Spark API文档:

http://spark.apache.org/docs/latest/api/python/

PySpark|比RDD更快的DataFrame

走过路过,拉到底点个赞吧~

PySpark|比RDD更快的DataFrame

PySpark|比RDD更快的DataFrame

老铁们,长按二维码上车吧!

数据山谷 发起了一个读者讨论 留言板

来都来了,点个好看再走吧~~~



以上是关于PySpark|比RDD更快的DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

我应该在 PySpark 中选择 RDD 还是 DataFrame 之一?

pyspark建立RDD以及读取文件成dataframe

pyspark中的RDD到DataFrame(来自rdd的第一个元素的列)

pyspark 行列表的 RDD 到 DataFrame

PySpark - ALS 输出中的 RDD 到 DataFrame

pySpark 使用键/值从 RDD 创建 DataFrame