[譯]Spark SQL 訪問json和jdbc數(shù)據(jù)源

spark sql可以從很多數(shù)據(jù)源中讀寫數(shù)據(jù), 比較常用的是json文件和可使用jdbc協(xié)議的數(shù)據(jù)庫.

訪問json數(shù)據(jù)

官方文檔: https://spark.apache.org/docs/latest/sql-data-sources-json.html
注意: json文件的每一行必須是一個json對象

從json加載數(shù)據(jù)

Dataset<Row> people = spark.read().json("examples/src/main/resources/people.json");

或者

Dataset<Row> people = spark.read().format("json").load("examples/src/main/resources/people.json");

寫入數(shù)據(jù)到j(luò)son

people.write().json("examples/src/main/resources/people.json");

或者

people.write().format("json").save("examples/src/main/resources/people.json");

基于jdbc訪問數(shù)據(jù)庫

官方文檔: https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html
示例:

//讀取數(shù)據(jù)
       Dataset<Row> df = sparkSession.read()
                .format("jdbc")
                .option("url", "jdbc:mysql://192.168.1.22:3306/user?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai")
                .option("user", "root")
                .option("password", "123456")
                .option("dbtable","task_info")
                .load();
        df.show();
//寫入數(shù)據(jù), 事先創(chuàng)建好表
        df.write()
                .format("jdbc")
                .option("url", "jdbc:mysql://192.168.1.22:3306/user?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai")
                .option("dbtable", "task_info2")
                .option("user", "root")
                .option("password", "123456")
                .option("truncate","true")
                .mode(SaveMode.Overwrite)
                .save();

支持的選項如下:

Property Name Meaning
url jdbc連接串, 例如:jdbc:postgresql://localhost/test?user=fred&password=secret
dbtable 要訪問的表名. 注意當在read path訪問的時候, 它可能是SQL FROM 后面的有效內(nèi)容(比如子查詢). 不允許同時使用dbtablequery選項.
query 將數(shù)據(jù)讀取到spark的查詢. 這個查詢會被圓括號括起來, 作為FROM后面的子查詢. Spark會為這個子查詢設(shè)置一個別名. 例如, spark以下面這種形式向JDBC數(shù)據(jù)源發(fā)送查詢SELECT <columns> FROM (<user_specified_query>) spark_gen_alias
driver 連接url的JDBC驅(qū)動的類名
partitionColumn, lowerBound, upperBound 這些選項必須全部設(shè)置或者全部不設(shè)置.另外, numPartitions也要被一起設(shè)置.它們描述了從多個worker并行讀取時如何對表進行分區(qū).partitionColumn必須是相關(guān)表中的數(shù)字宁否、日期或時間戳列.注意悄蕾,LowerBound和UpperBound只是用來決定分區(qū)的步幅习绢,而不是用來過濾表中的行.所以表中的所有行都將被分區(qū)并返回.此選項僅適用于讀取.
numPartitions 表讀寫中可用于并行的最大分區(qū)數(shù)芋肠。這也決定了并發(fā)JDBC連接的最大數(shù)量拨脉。如果要寫入的分區(qū)數(shù)超過此限制逊移,則在寫入之前通過調(diào)用coalesce(numpartitions)將其減少到此限制.
queryTimeout 0意味著沒有限制严蓖。在寫入的時候逻翁,此選項效果取決于JDBC驅(qū)動程序如何實現(xiàn)APIsetQueryTimeout的饥努,例如,h2 JDBC驅(qū)動程序檢查每個查詢的超時八回,而不是整個JDBC批處理酷愧。默認值為0
fetchsize JDBC每次往返行數(shù), 這對默認值比較小的JDBC驅(qū)動有性能提升(比如Oracle默認是10行).這個選項僅對讀取操作有效.
batchsize JDBC批處理大小, 決定每次往返寫入的行數(shù).這個選項僅對寫入有效, 默認值為1000.
isolationLevel 事務(wù)隔離級別,對當前連接有效.它可以是NONE, READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ或SERIALIZABLE缠诅,對應(yīng)于JDBC連接對象定義的標準事務(wù)隔離級別溶浴,默認為READ_UNCOMMITTED.此選項僅適用于寫入.
sessionInitStatement 會話初始化語句, 在會話打開時, 執(zhí)行讀取數(shù)據(jù)之前, 可以執(zhí)行自定義的SQL語句(或者PL/SQL語句塊).
truncate 這是一個與JDBC寫入相關(guān)的選項。啟用SaveMode.Overwrite時管引,此選項會導(dǎo)致spark清空現(xiàn)有表士败,而不是刪除并重新創(chuàng)建它。這樣可以更有效率汉匙,并防止刪除表元數(shù)據(jù)(如索引)拱烁。但是生蚁,在某些情況下,它將不起作用戏自,例如當新數(shù)據(jù)具有不同的模式時邦投。它默認為false。此選項僅適用于寫入操作擅笔。
cascadeTruncate 這是一個與JDBC寫入相關(guān)的選項志衣。如果jdbc數(shù)據(jù)庫(PostgreSQL和Oracle)啟用并支持,則此選項允許執(zhí)行truncate table t cascade(對于postgresql猛们,執(zhí)行truncate table only t cascade以防止無意中清空子表)念脯。這將影響其他表,因此應(yīng)小心使用弯淘。此選項僅適用于寫入操作绿店。它默認為所討論的JDBC數(shù)據(jù)庫的默認級聯(lián)清空行為,在每個JDBCDialect中的isCascadeTruncate中指定庐橙。
createTableOptions 這是一個與JDBC寫入相關(guān)的選項假勿。如果指定,則此選項允許在創(chuàng)建表時設(shè)置特定于數(shù)據(jù)庫的表和分區(qū)選項(例如态鳖,create table t(name string)engine=innodb).此選項僅適用于寫入操作.
createTableColumnTypes 創(chuàng)建表時要使用的數(shù)據(jù)庫列數(shù)據(jù)類型转培,而不是默認值。數(shù)據(jù)類型信息的格式應(yīng)與創(chuàng)建表列語法相同(例如:“name char(64)浆竭,comments varchar(1024)”)浸须。指定的類型應(yīng)為有效的Spark SQL數(shù)據(jù)類型。此選項僅適用于寫入邦泄。
customSchema 用于從JDBC連接讀取數(shù)據(jù)的自定義模式删窒。例如,id DECIMAL(38, 0), name STRING虎韵。還可以指定部分字段易稠,其他字段使用默認類型映射。例如包蓝,id DECIMAL(38, 0)驶社。列名應(yīng)該與JDBC表的相應(yīng)列名相同。用戶可以指定Spark SQL的相應(yīng)數(shù)據(jù)類型测萎,而不是使用默認值亡电。此選項僅適用于讀取操作。
pushDownPredicate 啟用或禁用謂詞下推到JDBC數(shù)據(jù)源的選項硅瞧。默認值為true份乒,在這種情況下,spark將盡可能將過濾器向下推送到JDBC數(shù)據(jù)源或辖。否則瘾英,如果設(shè)置為false,則不會將任何過濾器向下推送到JDBC數(shù)據(jù)源缺谴,因此所有過濾器都將由spark處理。當SPARK比JDBC數(shù)據(jù)源更快地執(zhí)行謂詞篩選時,謂詞下推通常被關(guān)閉。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市耳高,隨后出現(xiàn)的幾起案子卷拘,更是在濱河造成了極大的恐慌,老刑警劉巖污筷,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件工闺,死亡現(xiàn)場離奇詭異,居然都是意外死亡瓣蛀,警方通過查閱死者的電腦和手機陆蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惋增,“玉大人叠殷,你說我怎么就攤上這事≌┟螅” “怎么了林束?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長稽亏。 經(jīng)常有香客問我壶冒,道長,這世上最難降的妖魔是什么截歉? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任胖腾,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咸作。我一直安慰自己锨阿,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布记罚。 她就那樣靜靜地躺著墅诡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毫胜。 梳的紋絲不亂的頭發(fā)上书斜,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音酵使,去河邊找鬼荐吉。 笑死,一個胖子當著我的面吹牛口渔,可吹牛的內(nèi)容都是我干的样屠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼缺脉,長吁一口氣:“原來是場噩夢啊……” “哼痪欲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起攻礼,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤业踢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后礁扮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體知举,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年太伊,在試婚紗的時候發(fā)現(xiàn)自己被綠了雇锡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡僚焦,死狀恐怖锰提,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芳悲,我是刑警寧澤立肘,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站名扛,受9級特大地震影響赛不,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜罢洲,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一踢故、第九天 我趴在偏房一處隱蔽的房頂上張望文黎。 院中可真熱鬧,春花似錦殿较、人聲如沸耸峭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劳闹。三九已至,卻和暖如春洽瞬,著一層夾襖步出監(jiān)牢的瞬間本涕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工伙窃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留菩颖,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓为障,卻偏偏與公主長得像晦闰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鳍怨,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容