Azure Databricks 第二篇:pyspark.sql 简介
pyspark中的DataFrame等价于Spark SQL中的一个关系表。在pyspark中,DataFrame由Column和Row构成。
- pyspark.sql.SparkSession:是DataFrame和SQL函数的主要入口
- DataFrameReader:读取数据,返回DataFrame
- DataFrameWriter:把DataFrame存储到其他存储系统
- pyspark.sql.DataFrame、pyspark.sql.Column和 pyspark.sql.Row
一,SparkSession类
在操作DataFrame之前,首先需要创建SparkSession,通过SparkSession来操作DataFrame。
1,创建SparkSession
通过Builder类来创建SparkSession,在Databricks Notebook中,spark是默认创建,表示一个SparkSession对象:
spark = SparkSession.builder \
.master("local") \
.appName("Word Count") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()
函数注释:
master(master):用于设置要连接的Spark的master URL,例如local表示在本地运行,local[4] 在本地使用4核运行,
appName(name):为application设置一个名字
config(key=None, value=None, conf=None):设置SparkSession的配置选项,
getOrCreate():获得一个已存在的或者创建一个新的SparkSession
2,从常量数据中创建DataFrame
从RDD、list或pandas.DataFrame 创建DataFrame:
createDataFrame(data, schema=None, samplingRatio=None, verifySchema=True)
3,从SQL查询中创建DataFrame
从一个给定的SQL查询或Table中获取DataFrame,举个例子:
df.createOrReplaceTempView("table1")
#use SQL query to fetch data
df2 = spark.sql("SELECT field1 AS f1, field2 as f2 from table1")
#use table to fetch data
df2 = spark.table("table1")
4,属性
read:该属性是DataFrameReader 对象,用于读取数据,返回DataFrame对象
readStream:该属性是DataStreamReader对象,用于读取Data Stream,返回 流式的DataFrame对象( streaming DataFrame)
二,DataFrameReader类
从外部存储系统中读取数据,返回DataFrame对象,通常使用SparkSession.read来访问,通用语法是先调用format()函数来指定输入数据的格式,后调用load()函数从数据源加载数据,并返回DataFrame对象:
df = spark.read.format('json').load('python/test_support/sql/people.json')
对于不同的格式,DataFrameReader类有细分的函数来加载数据:
df_csv = spark.read.csv('python/test_support/sql/ages.csv')
df_json = spark.read.json('python/test_support/sql/people.json')
df_txt = spark.read.text('python/test_support/sql/text-test.txt')
df_parquet = spark.read.parquet('python/test_support/sql/parquet_partitioned')
# read a table as a DataFrame
df = spark.read.parquet('python/test_support/sql/parquet_partitioned')
df.createOrReplaceTempView('tmpTable')
spark.read.table('tmpTable')
还可以通过jdbc,从JDBC URL中构建DataFrame
jdbc(url, table, column=None, lowerBound=None, upperBound=None, numPartitions=None, predicates=None, properties=None)
三,DataFrameWriter类
用于把DataFrame写入到外部存储系统中,通过DataFrame.write来访问。
(df.write.format('parquet')
.mode("overwrite")
.saveAsTable('bucketed_table'))
函数注释:
- format(source):指定底层输出的源的格式
- mode(saveMode):当数据或表已经存在时,指定数据存储的行为,保存的模式有:append、overwrite、error和ignore。
saveAsTable(name, format=None, mode=None, partitionBy=None, **options):把DataFrame 存储为表save(path=None, format=None, mode=None, partitionBy=None, **options):把DataFrame存储到数据源中
对于不同的格式,DataFrameWriter类有细分的函数来加载数据:
df.write.csv(os.path.join(tempfile.mkdtemp(), 'data'))
df.write.json(os.path.join(tempfile.mkdtemp(), 'data'))
df.write.parquet(os.path.join(tempfile.mkdtemp(), 'data'))
df.write.txt(os.path.join(tempfile.mkdtemp(), 'data')) #wirte data to external database via jdbc
jdbc(url, table, mode=None, properties=None)
四,DataFrame操作
DataFrame等价于Spark SQL中的关系表,
1,常规操作
从parquet 文件中读取数据,返回一个DataFrame对象:
people = spark.read.parquet("...")
从DataFrame对象返回一列:
ageCol = people.age
从DataFrame对象中row的集合:
people.collect()
从DataFrame对象中删除列:
people.drop(*cols)
2,创建临时视图
可以创建全局临时视图,也可以创建本地临时视图,对于local view,临时视图的生命周期和SparkSession相同;对于global view,临时视图的生命周期由Spark application决定。
createOrReplaceGlobalTempView(name)
createGlobalTempView(name)
createOrReplaceTempView(name)
createTempView(name)
3,DataFrame数据的查询
df.filter(df.age > 3)
df.select('name', 'age') # join
cond = [df.name == df3.name, df.age == df3.age]
df.join(df3, cond, 'outer').select(df.name, df3.age) #group by
df.groupBy('name').agg({'age': 'mean'})
五,分组数据
DataFrame.groupBy() 返回的是GroupedData类,可以对分组数据应用聚合函数、apply函数。
df3.groupBy().max('age', 'height').collect()
请参考官方手册,不再赘述。
参考文档:
Azure Databricks 第二篇:pyspark.sql 简介的更多相关文章
- Azure Databricks 第一篇:创建工作区、集群和Notebook
Azure Databricks是一个可扩展的数据分析平台,基于Apache Spark.Azure Databricks 工作区(Workspace)是一个交互式的环境,工作区把对象(noteboo ...
- Python学习之路【第二篇】-pyc简介、Python常用的数据类型及其用法和常用运算符
1.pyc简介 python程序在运行时也有编译过程,编译后会产生.pyc文件.这是一种由python虚拟机执行的二进制文件(字节码),用于保存内存中PyCodeObject,以便加快程序的加载运行. ...
- 数据库程序接口——JDBC——API解读第二篇——执行SQL的核心对象
结构图 核心对象 Statement Statement主要用来执行SQL语句.它执行SQL语句的步骤为: 第一步:创建statement对象. 第二步:配置statement对象,此步骤可以忽略. ...
- 【ABAP系列】SAP ABAP7.40新语法简介第二篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简 ...
- 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
- (转)从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
原文地址: http://www.cnblogs.com/lyhabc/p/4682028.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集 ...
- 第二篇 SQL Server安全验证
本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...
- 第二篇 SQL Server代理作业步骤和子系统
本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...
- 【译】第二篇 SQL Server安全验证
本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...
随机推荐
- python xlsxwriter创建excel 之('Exception caught in workbook destructor. Explicit close() may be required for workbook.',)
python2.7使用xlsxwriter创建excel ,不关闭xlsxwriter对象,会报错: Exception Exception: Exception('Exception caught ...
- SASRec 实践
SASRec--2018,ICDM,论文<Self-Attentive Sequential Recommendation> 源代码链接:https://github.com/kang20 ...
- PC微信[多开+免扫码+防撤回撤回提示+转存语音+自动收款+远程命令]
PC端微信玩出了新花样,主要技术为Hook技术 有兴趣的小伙伴可以去了解下hook钩子技术 版本介绍: 增加转存语音到MP3(保存你重要的语音数据) 增加表图转存; 增加自动收转账和自动回复; 增加远 ...
- Codeforces Round #682 Div2 简要题解
Contest link A.Specific Tastes of Andre Problem link 题意 构造一个长度为 \(n\) 的序列,使得每个非空子序列的和都被其长度整除. 思路 直接每 ...
- 题解 CF611H 【New Year and Forgotten Tree】
Solution 提供一种新思路. 首先考虑如何判断一个状态是否合法. 考虑把所有十进制长度一样的数缩成一个点. 这样的点的个数 \(\le 5\). 蒟蒻猜了一个结论:只要满足对于所有缩出来的点的子 ...
- Linux安装Mysql8.0.11
0. 安装环境 1. 下载安装包 方式一:百度网盘下载 链接:https://pan.baidu.com/s/11t_JXUp-SXRaioNDvdltNg 提取码:uzyj 方式二:在线下载 1 ...
- html+css一些简单案例:爱心点击,盒子模型,2d动画
canvas绘制爱心 效果预览 上代码 <!doctype html> <html> <head> <title>HTML5 Canvas爱心飘动动画特 ...
- 想用selenium ,先了解html 基础知识(5)
二.HTML语法---了解!1.HTML超文本标记语言,是网页设计使用的语言.2.从<html>开始,到</html>结束,里面包括head和body两个部分,我们测试人员关心 ...
- [OI笔记]每周刷题记录
一些题库: bzoj.uoj.luogu(洛谷).CF.loj.hdu.poj.51nod 下面是一些近期的做题记录 省选爆炸-然后大概就先这样了,要回去读一段时间文化课,如果文化课还不错的话也许还会 ...
- ECharts的下载和安装(图文详解)
首先搜索找到ECharts官网,点击进入. 找到下载 进入就看到第三步,就点击在线制作 点击进入之后就自己可以选择里面的形状图,就在线制作.最后生成echarts.min.js 点击下载后就会生成js ...