040 DataFrame中的write与read编程
一:SparkSQL支持的外部数据源
1.支持情况

2.External LIbraries
不是内嵌的,看起来不支持。
但是现在已经有很多开源插件,可以进行支持。
3.参考材料
· 支持的格式:https://github.com/databricks
二:准备
1.启动服务
RunJar是metastore服务,在hive那边开启。
只需要启动三个服务就可以了,以后runjar都要启动,因为这里使用hive与spark集成了,不启动这个服务,就会总是报错。

2.启动spark-shell

三:测试检验程序
1.DataFrame的构成

2.结果

3.测试

4.结果

四:DataFrame的创建
1.创建SQLContext
val sqlContext=new SQLContext(sc)
2.创建DataFrame(两种方式)
val df=sqlContext.#
val df=sqlContext.read.#
3.DataFrame数据转换
val ndf=df.#.#
4.结果保存
ndf.#
ndf.write.#
五:DataFrame的保存
1.第一种方式
将DataFrame转换为RDD,RDD数据保存
2.第二种方式
直接通过DataFrame的write属性将数据写出。
但是有限制,必须有定义类实现,默认情况:SparkSQL只支持parquet,json,jdbc
六:两个常用的网站(数据源问题)
1.金砖公司提供的一些插件

2.package网址
https://spark-packages.org/

七:DataFrameReader编程模式
功能: 通过SQLContext提供的reader读取器读取外部数据源的数据,并形成DataFrame
1.源码的主要方法
format:给定数据源数据格式类型,eg: json、parquet
schema:给定读入数据的数据schema,可以不给定,不给定的情况下,进行数据类型推断
option:添加参数,这些参数在数据解析的时候可能会用到
load:
有参数的指从参数给定的path路径中加载数据,比如:JSON、Parquet...
无参数的指直接加载数据(根据option相关的参数)
jdbc:读取关系型数据库的数据
json:读取json格式数据
parquet:读取parquet格式数据
orc: 读取orc格式数据
table:直接读取关联的Hive数据库中的对应表数据
八:Reader的程序测试
1.新建文件夹

2.上传数据

3.加载json数据
val df=sqlContext.read.format("json").load("spark/sql/people.json")
结果:

4.数据展示
df.show()
结果:

5.数据注册成临时表并操作展示

结果:

6.和上面的方法等效的方式
sqlContext.sql("select * from json.`spark/sql/people.json`").show()
结果:

7.读取显示parquet格式的数据
sqlContext.read.format("parquet").load("spark/sql/users.parquet").show()
结果:

8.加载mysql中的数据
这个是服务器上的mysql。
sqlContext.read.jdbc("jdbc:mysql://linux-hadoop01.ibeifeng.com:3306/mysql?user=root&password=123456", "user", new java.util.Properties()).show()
这个地方比较特殊。
第一次使用bin/spark-shell进入后,使用命令,效果如下:

然后使用这种方式进行启动,加上jar
bin/spark-shell --jars /opt/softwares/mysql-connector-java-5.1.27-bin.jar --driver-class-path /opt/softwares/mysql-connector-java-5.1.27-bin.jar

九:DataFrameWriter编程模式
功能:将DataFrame的数据写出到外部数据源
1.源码主要方法
mode: 给定数据输出的模式
`overwrite`: overwrite the existing data.
`append`: append the data.
`ignore`: ignore the operation (i.e. no-op).
`error`: default option, throw an exception at runtime.
format:给定输出文件所属类型, eg: parquet、json
option: 给定参数
partitionBy:给定分区字段(要求输出的文件类型支持数据分区)
save: 触发数据保存操作 --> 当该API被调用后,数据已经写出到具体的数据保存位置了
jdbc:将数据输出到关系型数据库
当mode为append的时候,数据追加方式是:
先将表中的所有索引删除
再追加数据
没法实现,数据不存在就添加,存在就更新的需求
十:writer的程序测试
1.读取hive数据,形成DateFrame

2.结果保存为json格式
自动创建存储目录。

效果:

3.不再详细粘贴结果了
读取Hive表数据形成DataFrame
val df = sqlContext.read.table("common.emp") 结果保存json格式
df.select("empno","ename").write.mode("ignore").format("json").save("/beifeng/result/json")
df.select("empno","ename").write.mode("error").format("json").save("/beifeng/result/json")
df.select("empno","ename", "sal").write.mode("overwrite").format("json").save("/beifeng/result/json")
df.select("empno","ename").write.mode("append").format("json").save("/beifeng/result/json")\
上面虽然在追加的时候加上了sal,但是解析没有问题
sqlContext.read.format("json").load("/beifeng/result/json").show() 结果保存parquet格式
df.select("empno", "ename", "deptno").write.format("parquet").save("/beifeng/result/parquet01")
df.select("empno", "ename","sal", "deptno").write.mode("append").format("parquet").save("/beifeng/result/parquet01") ## 加上sal导致解析失败,读取数据的时候 sqlContext.read.format("parquet").load("/beifeng/result/parquet01").show(100)
sqlContext.read.format("parquet").load("/beifeng/result/parquet01/part*").show(100) partitionBy按照给定的字段进行分区
df.select("empno", "ename", "deptno").write.format("parquet").partitionBy("deptno").save("/beifeng/result/parquet02")
sqlContext.read.format("parquet").load("/beifeng/result/parquet02").show(100)
040 DataFrame中的write与read编程的更多相关文章
- pandas | 详解DataFrame中的apply与applymap方法
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是pandas数据处理专题的第5篇文章,我们来聊聊pandas的一些高级运算. 在上一篇文章当中,我们介绍了panads的一些计算方法, ...
- [引]MSDN Visual Basic 和 C# 中都会用到的编程概念
本文转自:http://msdn.microsoft.com/zh-cn/library/dd460655.aspx 本节介绍 Visual Basic 和 C# 中都会用到的编程概念. 本节内容 ...
- pandas,对dataFrame中某一个列的数据进行处理
背景:dataFrame的数据,想对某一个列做逻辑处理,生成新的列,或覆盖原有列的值 下面例子中的df均为pandas.DataFrame()的数据 1.增加新列,或更改某列的值 df[&qu ...
- [Spark][Python][DataFrame][RDD]DataFrame中抽取RDD例子
[Spark][Python][DataFrame][RDD]DataFrame中抽取RDD例子 sqlContext = HiveContext(sc) peopleDF = sqlContext. ...
- python – 基于pandas中的列中的值从DataFrame中选择行
如何从基于pandas中某些列的值的DataFrame中选择行?在SQL中我将使用: select * from table where colume_name = some_value. 我试图看看 ...
- Python中识别DataFrame中的nan
# 识别python中DataFrame中的nanfor i in pfsj.index: if type(pfsj.loc[i]['WZML']) == float: print('float va ...
- [Spark][Python]DataFrame中取出有限个记录的例子
[Spark][Python]DataFrame中取出有限个记录的例子: sqlContext = HiveContext(sc) peopleDF = sqlContext.read.json(&q ...
- STL中实现 iterator trail 的编程技巧
STL中实现 iterator trail 的编程技巧 <泛型编程和 STL>笔记及思考. 这篇文章主要记录在 STL 中迭代器设计过程中出现的编程技巧,围绕的 STL 主题为 (迭代器特 ...
- 更改 pandas dataframe 中两列的位置
更改 pandas dataframe 中两列的位置: 把其中的某列移到第一列的位置. 原来的 df 是: df = pd.read_csv('I:/Papers/consumer/codeandpa ...
随机推荐
- 【ARC079F】Namori Grundy
Description 题目链接 大意:给一张基环外向树.要求给每一个点确定一个值,其值为所有后继点的\(\text{mex}\).求是否存在确定权值方案. Solution 首先,对于叶子节点,其权 ...
- 洛谷 P2051 [AHOI2009]中国象棋 解题报告
P2051 [AHOI2009]中国象棋 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法. ...
- 洛谷4859 BZOJ3622 已经没什么好害怕的了(DP,二项式反演)
题目链接: 洛谷 BZOJ 题目大意:有两个长为 $n$ 的序列 $a,b$,问有多少种重排 $b$ 的方式,使得满足 $a_i>b_i$ 的 $i$ 的个数比满足 $a_i<b_i$ 的 ...
- Java 8 中 Date与LocalDateTime、LocalDate、LocalTime互转
Java 8中 java.util.Date 类新增了两个方法,分别是from(Instant instant)和toInstant()方法 // Obtains an instance of Dat ...
- CF1027C Minimum Value Rectangle
之前做的时候没想出来...现在来数学推导一波. 题意:从n个木棒中选出4个拼成一个矩形,使得 (周长)2/面积 最小. 解:设矩形宽a长b.我们要最小化下面这个式子: 去掉常数,不妨设b = a + ...
- Java基础-Java中的并法库之线程池技术
Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.
- 流媒体技术学习笔记之(九)减少VLC 延迟的方法
之前写过一篇关于在Linux平台上编译Android平台上VLC播放器源代码的文章,vlc这款播放器非常优秀而且是开源的,它的核心是开源视频编解码库ffmpeg.而且这款播放器还支持RTSP协议,这个 ...
- Apache Oozie Coordinator 作业自定义配置定时任务
一,介绍 Oozie是Hadoop的工作流系统,如果使用Oozie来提交MapReduce作业(Oozie 不仅仅支持MapReduce作业,还支持其他类型的作业),可以借助Oozie Coordin ...
- shell 判断路径
判断路径 ];then echo "找到了123" if [ -d /root/Desktop/text ] then echo "找到了text" else ...
- sequelize初使用
官网地址:Sequelize Sequelize is a promise-based ORM for Node.js v4 and up. It supports the dialects Post ...