一.数据解释与杂项
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源码中实现了三个接口或者子类