Spark(idea)操作mysql进行查询和插入 (代码+理解)
生活随笔
收集整理的這篇文章主要介紹了
Spark(idea)操作mysql进行查询和插入 (代码+理解)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
首先在maven中加入配置
<!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.27</version></dependency>然后在idea配置數(shù)據(jù)庫
1) 查詢
//1.查詢數(shù)據(jù)//創(chuàng)建jdbcRDD,訪問數(shù)據(jù)庫val sql = "select name,age from rdd where id >= ? and id <= ?"//有個分區(qū)的概念val jdbcRDD = new JdbcRDD(sc,() => {//獲取數(shù)據(jù)庫連接對象Class.forName(driver)java.sql.DriverManager.getConnection(url, userName, passWd)},sql,1,3,2,(rs)=>{println(rs.getString(1)+","+rs.getInt(2))})jdbcRDD.collect //這里是行動算子2.插入(優(yōu)化前)
//結(jié)果:(發(fā)現(xiàn)順序并不是插入的輸入,因為分給的executor不同,但是mysql是無序的,所以并沒有關(guān)系)//3 ss 40//2 lisi 30//1 zhangsan 20dataRDD.foreach{case (id,username ,age) =>{//連接對象Class.forName(driver)val connection:Connection = java.sql.DriverManager.getConnection(url, userName, passWd)val sql = "insert into rdd(id,name,age) values (?,?,?)"val statement = connection.prepareStatement(sql)statement.setInt(1,id)statement.setString(2,username)statement.setInt(3,age)statement.executeUpdate()statement.close()connection.close()}}觀察上面代碼會發(fā)現(xiàn),每插入一天數(shù)據(jù)都會創(chuàng)建一個連接對象,會導致性能很差,數(shù)據(jù)太大會導致mysql崩潰,需要進行優(yōu)化
使用foreachPartition對每個分區(qū)集合做操作
//3.保存數(shù)據(jù)(優(yōu)化)//foreachPartition對每個分區(qū)集合做操作dataRDD.foreachPartition(datas =>{//data是一個集合不涉及網(wǎng)絡(luò)交互//連接對象(把連接對象創(chuàng)建在這里,是以每個區(qū)為單位,多少個區(qū)就會創(chuàng)建多少個連接對象,相對來說效率高很多)//缺點:會出現(xiàn)oom(內(nèi)存溢出 out of mana)(還沒執(zhí)行完數(shù)據(jù)就進來會出現(xiàn)內(nèi)存溢出)Class.forName(driver)val connection:Connection = java.sql.DriverManager.getConnection(url, userName, passWd)datas.foreach({case (id,name,age) => {val sql = "insert into rdd(id,name,age) values (?,?,?)"val statement = connection.prepareStatement(sql)statement.setInt(1,id)statement.setString(2,name)statement.setInt(3,age)statement.executeUpdate()statement.close()}connection.close()})})總結(jié)
以上是生活随笔為你收集整理的Spark(idea)操作mysql进行查询和插入 (代码+理解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不止有双挖孔屏 iPhone 14 Pr
- 下一篇: 清华专家称苹果自乔布斯之后再无创新:跟以