从传统数据库中读取数据,然后一次性插入至hive表中.
val sc = new SparkContext(new SparkConf())
val sqlContext = new SQLContext(sc)
val schema = StructType(List(
StructField("branch_no", StringType, true),//StructField("branch_no", DecimalType(), true),
StructField("broker_account", StringType, true),
StructField("broker_name", StringType, true),
StructField("broker_type", StringType, true),
StructField("client_branch_no", StringType, true),
StructField("client_id", StringType, true),
StructField("client_name", StringType, true),
StructField("client_status", StringType, true),
StructField("broker_status", StringType, true)
))
val url = "jdbc:postgresql://10.2.22.222:5432/iris_test?user=iris&password=test123"
logInfo("读取pg库数据```开始")
val tableDataFrame = sqlContext.load("jdbc",Map(
"url" -> url,
"driver" -> "org.postgresql.Driver",
"dbtable" -> "broker_test"
))
tableDataFrame.registerTempTable("iris_table")
val tableRdd = sqlContext.sql("select * from iris_table").rdd
/*.map(
p => Row(
p(0).asInstanceOf[Int]
p(1).toString,
p(2).toString,
p(3).toString
)
)*/
//上面代码可以针对某些类型做转换
logInfo("读取pg库数据```完成")
logInfo("插入hive```开始")
val hiveCtx = new HiveContext(sc)
val temp = hiveCtx.createDataFrame(tableRdd,schema)
temp.registerTempTable("tempTable")
val hiveDb = "testDb"
hiveCtx.sql(s"USE $hiveDb")
hiveCtx.sql("insert into broker_test_t select * from tempTable")
logInfo("插入hive```完成")
1.权限问题
可能会报hadoop.security.AccessControlException
原因是这个表你没有写入权限.
所以在插入前,一定要先确认你是否有写入权限
2.类型匹配出错
这个问题基本都是自己在定义字段类型的时候不仔细
带上一份写的不错的文章,建议看看:Spark(Hive) SQL数据类型使用详解
如有其他问题,欢迎回复.
如此文章对你有帮助,欢迎留言点赞.谢谢.