關於sparksql使用hive讀寫oracale相關操作

在本人項目中涉及到spark相關讀寫問題,實際上我們項目做的是一個利用sparksql提高傳統業務數據的流轉速度的項目,使用hive中的數據並利用spark計算將數據回寫入oracle。
本人使用的是spark 1.5的版本,內網操作,無法升級。
記錄以下問題
1.使用oracle的原數據進行讀,寫入hive表
val conf=new SparkConf().setMaster(“local”).setAppName(“firstTry”)

val sc =new SparkContext(conf)
val sqlContext=new HiveContext(sc)

val jdbcDF1 =sqlContext.load(“jdbc”,Map(“url” -> “jdbc:oracle:thin:root/123456@//192.168.10.124:3306/orcl”,
“dbtable” -> “( select * from T_LG_GNLK ) “,
“driver” -> “oracle.jdbc.driver.OracleDriver”,
“numPartitions” ->”5”,
“partitionColumn”->”OBJECTID”,
“lowerBound”->”0”,
“upperBound”->”80000000”))
jdbcDF1.wirte.mode(“overwrite”).saveAsTable(“abb.T_LG_GNLK”)

val theDF=sqlContext.sql(“select * from abb.T_LG_GNLK “)

theDF.take(10).foreach(println)

println(“成功加載!”)
sc.stop()

2.讀hive的表,再寫入oracle中
工程需要ojdbc14的依賴包

需要import java.util.Properties以及
import oracle.jdbc.driver.OracleDriver

val conf=new SparkConf().setMaster(“local”).setAppName(“firstTry”)

val sc =new SparkContext(conf)
val sqlContext=new HiveContext(sc)

val theDF=sqlContext.sql(“select * from abb.T_LG_GNLK” )
val url=” ”
val table=” “

val connectProperties = new Properties()
connectProperties.put(“user”, “GSPWJC”)
connectProperties.put(“password”, “GSPWJC”)
connectProperties.put(“driver”,”oracle.jdbc.driver.OracleDriver”)

theDF.write.jdbc(url,table,connectProperties )
sc.stop()
其中給配置參數時可能會報錯無法找到driver類,需要把ojdbc14的包通過
spark-submit –jars /opt/lib/ojdbc14.jar –class com.cpic.bigdata.test1 /opt/bigdata/test/test.jar
進行配置方可解除錯誤。

3.利用oracle進行讀寫oracle的表

val conf=new SparkConf().setMaster(“local”).setAppName(“firstTry”)

val sc =new SparkContext(conf)
val sqlContext=new HiveContext(sc)

val jdbcDF1 =sqlContext.read.format(“jdbc”).options(Map(“url” -> “jdbc:oracle:thin:root/123456@//192.168.10.124:3306/orcl”,
“dbtable” -> “T_LG_GNLK “,
“driver” -> “oracle.jdbc.driver.OracleDriver”,
“numPartitions” ->”5”,
“partitionColumn”->”OBJECTID”,
“lowerBound”->”0”,
“upperBound”->”80000000”))
).load()

jdbcDF1 .write.format(“jdbc”).options(Map(
“dbtable” -> “T_LG_GNLK “,
“driver” -> “oracle.jdbc.driver.OracleDriver”,
“numPartitions” ->”5”,
“dbtable” -> “out_T_LG_GNLK “,
“partitionColumn”->”OBJECTID”,
“lowerBound”->”0”,
“upperBound”->”80000000”))
)).save()

sc.stop()

4.部分問題
在使用sparksql建立oracle表中,df.createjdbctable(url,table.false)該方式會報錯無法找到driver,並不可取

使用hive去建立rdd再通過save的方式,會報錯爲not allow create table as select。無法使用sparksql來查詢hive數據,利用select語句進行創建rdd,該方式也不可取。

其中還有一部分問題,是由於,多次讀寫parquet中臨時表等多個落地表的schame語法有問題,導致讀寫可能會出錯,使用打印語法,檢查,部分字段需要cast

在spark中寫入hive時float會自動轉成timestamp,強制轉成string類型即可解決

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章