Spark同步mysql数据到hive

本文介绍如何使用Spark从MySQL数据库读取数据,并解决Hive1.1版本不支持Date类型的问题。通过Scala代码示例,演示了如何加载数据、转换日期字段为字符串以及将数据写入Hive表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:从maven中下连接mysql的jar包

第二步:spark2-shell --jars mysql-connector-java-8.0.15.jar

第三步:

// scala 版

val df = spark.read.format("jdbc").option("url", "jdbc:mysql://rr-bp1d22ltxgwa09g44720.mysql.rds.aliyuncs.com/"+dbname+"?useUnicode=true&characterEncoding=UTF-8").option("driver", "com.mysql.jdbc.Driver").option("fetchsize", 1000).option("numPartitions", 2).option("dbtable", "(select * from " + tablename + ") as t").option("user", "用户名").option("password", "密码").load()

df.write.mode("Overwrite").saveAsTable("写入hive的表名")

 

如果要同步很多,将上述的代码封装成一个函数,然后做for循环就好了!!

 

Hive1.1版本不支持Date数据类型,所以遇到这个情况,先把Date类型转换为String类型,我这边用最笨的方法,构建HSQL来进行转换

# scala 版本

var columns=df.columns.toBuffer
val dateTypecolumns=Array("last_biz_date","final_repayment_day","principal_settled_day","value_date")

columns--=dateTypecolumns

val temp="CAST(last_biz_date AS STRING), CAST(final_repayment_day AS STRING), CAST(principal_settled_day AS STRING), CAST(value_date AS STRING)"

val temp2=temp+','+columns.mkString(",")

def get_columns(x:String)={
   val df=spark.sql(s"select $x from df")
   df
}
    get_columns(temp2).write.mode("Overwrite").saveAsTable("hive表名")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值