关于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.saw.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类型即可解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值