Spark SQL外部数据源的机制以及spark-sql的使用

发布时间:2021-09-14 11:25 来源:亿速云 阅读:0 作者:chen 栏目: 网络安全

这篇文章主要介绍“Spark SQL外部数据源的机制以及spark-sql的使用”,在日常操作中,相信很多人在Spark SQL外部数据源的机制以及spark-sql的使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spark SQL外部数据源的机制以及spark-sql的使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一.数据解释与杂项

1.External Data Source API  外部数据源

2.json也有些弊端

例如你第一次读的是
id:1,name:xxx
第二次
id:1,name:xxx,session:222  这样代码就要改
还有数据类型如果你是
id:"xxx"  根本不行

3.常用外部数据源

FileSystem:HDFS,Hbase,S3,OSS 等
HDFS 与  join  你要用sqoop把 hdfs,mysql都要记载到hive中
但是用spark 一句话就可以

4.—packages

--packages  优点,灵活,给你都拉去过来本地有的,没有的才下载的   
缺点:生产中集群不能上网,maven没用
解决办法:有--jars    打成jar包传上去

5.内部内置与外部数据源

json.vsv,hdfs,hive,jdbc,s3,parquet,es, 等
分为两大类 build-in (内置) , 3th-party(外部)
spark.read.load()  默认读的是parquet文件

6.外部添加jar包和使用实例

csv为例使用https://spark-packages.org 这个网址
点homepage

7.读写标准写法

8.自定义约束条件

9.支持数组等其他复杂类型像hive

二.JDBC读写问题

1.写入时文件存在问题(已经存在)

2.解决方式官网  加载文件数据

存在抛出异常
目标存在追加,但是重跑一次可能两份,有弊端(保证不了每次处理都是一样的)
目标表存在,已经存在的数据被清掉
忽略模式,有了就不会再往里加了

3.想看到你写的文件内容可以不压缩

user.select("name").write.format("json").option("compression","none").save("file:///root/test/json1/")
 user.select("name").write().format("json").save("/root/test/json1/")

4.mode源码展示   大写小写都一样

5.savemode是枚举类型    java类

6.效果一样

result.write.mode("default")
result.write.mode(SaveMode.ErrorIfExists)

7.append 重跑一次有两份了

8.官网读取JDBC数据注意一定要加driver属性

9.属性解释官网

10.读jdbc时候可以让多少条进一个分区,其余进那个分区可以设置

哪个字段分区
最少,最多多少条
几个分区
一次进去多少条

三.spark-sql的使用

1.jar包添加   注意如果报加不进去,你要加上最后面一句话,版本问题

2.spark-sql可以直接加载hive中的表

sparksession中有个table方法直接可以把表转化为DataFrame

3.加载jdbc  代码

4.join 注意

 三个等号,否则报错,注意条件

四.外部数据源的机制

1.PPD优化

2.实现三个接口或者子类

如何更有效的读取外部数据源  Table sCAN
加载外部数据源数据,定义数据的schema信息Base(抽象类必须有子类)
写必须实现RelationProvicer

3.TableScan对应PDD优化的位置

就是上图第一行什么都不管,读出什么是什么

裁剪对应第二个

裁剪过滤对应第三个
两个图就参数不同,功能一致

4. 其余两项源码

实现这三个接口
一个可以写schema信息
一个是过滤
一个可以写出去
带scan是查,insert 写, base加载数据源和schema信息

5.JDBC源码中实现了三个接口或者子类

免责声明:本站发布的内容(图片、视频和文字)以原创、来自互联网转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系QQ:712375056 进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。