ITPub博客

首页 > 大数据 > Spark > Spark SQL外部数据源与实现机制

Spark SQL外部数据源与实现机制

原创 Spark 作者:yunqiublog 时间:2019-08-14 10:48:16 0 删除 编辑

一.数据解释与杂项

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 与 mysql join  你要用sqoop把 hdfs,mysql都要记载到hive中
但是用spark 一句话就可以

4.—packages


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

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


json.vsv,hdfs,hive,jdbc,s3,parquet,es,redis 等
分为两大类 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源码中实现了三个接口或者子类

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69941978/viewspace-2653619/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论
不怂就是干

注册时间:2019-07-22

  • 博文量
    13
  • 访问量
    4745