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原始碼中實現了三個介面或者子類
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69941978/viewspace-2653619/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spark SQL:JSON資料來源複雜綜合案例實戰SparkSQLJSON
- Spark SQL:Hive資料來源複雜綜合案例實戰SparkSQLHive
- Spark SQL:JDBC資料來源複雜綜合案例實戰SparkSQLJDBC
- SparkSQL外部資料來源SparkSQL
- Sentinel-Go 整合 Nacos 實現外部動態資料來源Go
- Spark SQL:Parquet資料來源之自動分割槽推斷SparkSQL
- spark streaming執行kafka資料來源SparkKafka
- Spark Streaming + Spark SQL 實現配置化ETSparkSQL
- 實現多資料來源事務
- spark sql與mysql 資料載入與匯出資料到mysqlSparkMySql
- 使用 SAP HANA Virtual Table 連線外部資料來源
- 【Spark】Spark容錯機制Spark
- Spark SQL知識點與實戰SparkSQL
- 談談Spring Boot 資料來源載入及其多資料來源簡單實現Spring Boot
- Spark IO機制Spark
- 多資料來源與動態資料來源的權衡
- Spark SQL知識點大全與實戰SparkSQL
- 使用單例模式來實現動態資料來源管理單例模式
- 聊聊如何利用apollo與druid整合實現資料來源動態熱切UI
- Spark的危機與機遇:未來必然是AI框架倒推資料處理框架SparkAI框架
- Spring-Boot 多資料來源配置+動態資料來源切換+多資料來源事物配置實現主從資料庫儲存分離Springboot資料庫
- 使用 Admission Webhook 機制實現多叢集資源配額控制WebHook
- 分享自研實現的多資料來源(支援同DB不同表、跨DB表、記憶體資料、外部系統資料等)分頁查詢工具類實現原理及使用記憶體
- spark sql 實踐(續)SparkSQL
- SpringBoot整合MyBatis-Plus實現多資料來源操作Spring BootMyBatis
- 如何用hutool-db實現多資料來源配置
- Hystrix- 基於 Hystrix 訊號量機制實現資源隔離
- Laravel-admin 資料來自外部 APILaravelAPI
- Spark SQL:實現日誌離線批處理SparkSQL
- SQL server資料庫with as子句與遞迴查詢的實現SQLServer資料庫遞迴
- Spring Boot 揭祕與實戰(二) 資料儲存篇 – 資料訪問與多資料來源配置Spring Boot
- MySQL 隨機查詢資料與隨機更新資料實現程式碼MySql隨機
- MS SQL Server資料庫事務鎖機制分析(轉)SQLServer資料庫
- spark接入mysql,檢視源端資料SparkMySql
- Redis 設計與實現 (五)--多機資料庫的實現Redis資料庫
- Android資源訪問機制Android
- Kubernetes List-Watch 機制原理與實現 - chunked
- Spark Streaming 的容錯機制Spark