Pyspark学习二:快速入门基本数据结构

打印 上一主题 下一主题

主题 1578|帖子 1578|积分 4734

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
写在前面:实际工作中实在不需要自己安装和配置,更重要的是会用。所以就不研究怎么安装配置了。
前面介绍过:简单来说,Spark是一款分布式的盘算框架,用于调度成百上千的服务器集群,盘算TB、PB以致EB级别的海量数据。Spark作为环球顶级的分布式盘算框架,支持众多的编程语言进行开发Python语言,则是Spark重点支持的方向,体现为Python第三方库:PySpark。
一、快速入门

PySpark 应用程序从初始化开始,SparkSession这是 PySpark 的入口点。如下:
  1. from pyspark.sql import SparkSession
  2. spark = SparkSession.builder.getOrCreate()
复制代码
刚接触Pyspark你大概有点懵,为啥你看别的教程大概发现:

利用Pyspark起首需要构建一个实行情况入口对象,PySpark的实行情况入口对象是类SparkContext
1.1. SparkSession 和 SparkContext 的区别

在Apache Spark中,SparkSession和SparkContext是两个焦点的概念,他们在差别版本的Spark利用。
SparkContext

SparkContext是老一代API的焦点入口点,它代表了一个到Spark集群的毗连。通过SparkContext,你可以访问分布式盘算的全部功能,比如创建RDD(Resilient Distributed Dataset),实行任务等。它是与集群交互的重要方式,在Spark应用程序中扮演着至关重要的角色。每个JVM中只能有一个活泼的SparkContext。在早期版本的Spark中,开发者直接利用SparkContext来编写程序。
SparkSession

SparkSession是在Spark 2.0中引入的一个新的抽象层,旨在为开发者提供一个同一的切入点来利用Spark的全部功能,包括DataFrame API、SQL查询、流处理等等。SparkSession内部包罗了SparkContext,同时也提供了更高级的功能,使得利用更加简便。它允许你无缝地在差别范例的Spark API之间切换,而不需要显式地管理底层的SparkContext。


  • 同一性:SparkSession提供了一种同一的方式来访问Spark的各种功能,避免了需要单独初始化SQLContext、HiveContext以及SparkContext的情况。
  • 易用性:对于新用户来说,SparkSession更加直观易用,由于它简化了很多配置和初始化过程。
  • 功能性:除了包罗原有的SparkContext功能外,还增加了对DataFrame和Dataset的支持,可以直接运行SQL查询,支持流处理等更多高级特性。
总结来说,如果你正在利用的是较新版本的Spark,推荐利用SparkSession作为你的重要编程入口,由于它不仅涵盖了SparkContext的全部功能,而且还提供了额外的高级特性,使得开发更加高效便捷。而对于那些仍在维护基于旧版Spark的应用程序的开发者来说,理解并利用SparkContext仍然是须要的。
二、DataFrame 创建

通常, pyspark.sql.SparkSession.createDataFrame 通过传递列表、元组、字典和pyspark.sql.Row 的列表、由此类列表构成的 RDD 来创建 PySpark DataFrame。
pyspark.sql.SparkSession.createDataFrame利用schema参数来指定 DataFrame 的数据范例。当省略时,PySpark 通过从数据中抽取样本来推断相应的数据范例。


  • eg1:从行列表中创建一个不指明数据范例的 PySpark DataFrame
  1. from datetime import datetime, date
  2. import pandas as pd
  3. from pyspark.sql import Row
  4. df = spark.createDataFrame([
  5.     Row(a=1, b=2., c='string1', d=date(2000, 1, 1), e=datetime(2000, 1, 1, 12, 0)),
  6.     Row(a=2, b=3., c='string2', d=date(2000, 2, 1), e=datetime(2000, 1, 2, 12, 0)),
  7.     Row(a=4, b=5., c='string3', d=date(2000, 3, 1), e=datetime(2000, 1, 3, 12, 0))
  8. ])
  9. df
  10. ------------------------------------------------------------------------------------------
  11. out:DataFrame[a:bigint,b:double,c:字符串,d:日期,e:时间戳]
复制代码


  • eg2:创建具有明确数据范例的 PySpark DataFrame。
  1. df = spark.createDataFrame([
  2.     (1, 2., 'string1', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)),
  3.     (2, 3., 'string2', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)),
  4.     (3, 4., 'string3', date(2000, 3, 1), datetime(2000, 1, 3, 12, 0))
  5. ], schema='a long, b double, c string, d date, e timestamp')
  6. df
  7. ------------------------------------------------------------------------------------------
  8. out:DataFrame[a:bigint,b:double,c:字符串,d:日期,e:时间戳]
复制代码


  • eg3:直接用pandas 的 DataFrame 创建 PySpark DataFrame
  1. pandas_df = pd.DataFrame({
  2.     'a': [1, 2, 3],
  3.     'b': [2., 3., 4.],
  4.     'c': ['string1', 'string2', 'string3'],
  5.     'd': [date(2000, 1, 1), date(2000, 2, 1), date(2000, 3, 1)],
  6.     'e': [datetime(2000, 1, 1, 12, 0), datetime(2000, 1, 2, 12, 0), datetime(2000, 1, 3, 12, 0)]
  7. })
  8. df = spark.createDataFrame(pandas_df)
  9. df
  10. ------------------------------------------------------------------------------------------
  11. out:DataFrame[a:bigint,b:double,c:字符串,d:日期,e:时间戳]
复制代码


  • 上面创建的 DataFrames 都具有相同的效果和模式。
  1. # All DataFrames above result same.
  2. df.show()
  3. df.printSchema()
  4. ------------------------------------out------------------------------------------------------
  5. +---+---+-------+----------+-------------------+
  6. | a| b| c| d| e|
  7. +---+----+----------+----------+-------------------+
  8. | 1|2.0|字符串1|2000-01-01|2000-01-01 12:00:00|
  9. | 2|3.0|字符串2|2000-02-01|2000-01-02 12:00:00|
  10. | 3|4.0|字符串3|2000-03-01|2000-01-03 12:00:00|
  11. +---+---+-------+----------+-------------------+
  12. root
  13. |-- a: long(可空 = true)
  14. |-- b: double(可空 = true)
  15. |-- c: 字符串(可空 = true)
  16. |-- d: 日期(可空 = true)
  17. |-- e: 时间戳(可空 = true)
复制代码


  • 当创建了一个PySpark DataFrame,你可以通过如下语法查看其基本的数据结构和数据范例。
  1. df.show(1)
  2. df.show(1, vertical=True)  # 行也可以垂直显示。当行太长而无法水平显示时,这很有用。
  3. df.columns
  4. df.select("a", "b", "c").describe().show()  # 显示 DataFrame 的摘要
复制代码


  • DataFrame.collect() 将分布式数据作为 Python 中的本地数据网络到驱动程序端。方便进行各种运算利用。
  1. df.collect()
  2. [out]:
  3. [行(a=1,b=2.0,c='string1',d=datetime.date(2000, 1, 1),e=datetime.datetime(2000, 1, 1, 12, 0)),
  4. 行(a=2,b=3.0,c='string2',d=datetime.date(2000, 2, 1),e=datetime.datetime(2000, 1, 2, 12, 0)),
  5. 行(a=3,b=4.0,c='string3',d=datetime.date(2000, 3, 1),e=datetime.datetime(2000, 1, 3, 12, 0))]
复制代码


  • 为了避免引发内存不足非常,请利用DataFrame.take()或DataFrame.tail()。
  1. df.take(1)
  2. [out]:
  3. [Row(a=1,b=2.0,c='string1',d=datetime.date(2000, 1, 1),e=datetime.datetime(2000, 1, 1, 12, 0))]
复制代码


  • PySpark DataFrame 还提供转换回pandas DataFrame 的功能,以利用 pandas API。
  1. df.toPandas()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表