这篇文章主要介绍“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 与 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源码中实现了三个接口或者子类
到此,关于“Spark SQL外部数据源的机制以及spark-sql的使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/229113.html