Spark SQL外部資料來源與實現機制

yunqiublog發表於2019-08-14

一.資料解釋與雜項

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章