Spark中读取/写入mysql数据库

导入maven依赖

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.35</version>
        </dependency>

相关maven说明

读取代码

var url = "jdbc:mysql://" + p.server_ip + ":" + p.server_port + "/" + p.database_name

var row_data = spark.read.jdbc(url, table, predicates, prop)

函数:jdbc

def jdbc(url : scala.Predef.String, 
		table : scala.Predef.String, 
        predicates : scala.Array[scala.Predef.String], 
		connectionProperties : java.util.Properties) : org.apache.spark.sql.DataFrame
		)= { /* compiled code */ }

在这个函数里需要设置属性predicates、properties 的值

predicates = []
datelist = {"2014-11-01": "2015-01-01",
            "2014-09-01": "2014-11-01",
            "2014-07-01": "2014-09-01",
            "2014-05-01": "2014-07-01",
            "2014-03-01": "2014-05-01",
            "2014-01-01": "2014-03-01"}
for startdate, enddate in datelist.items():
    predicates.append("STARTDATE >= to_date('" + startdate + "', 'yyyy-MM-dd'" \
        + "and STARTDATE < to_date('" + enddate + "', 'yyyy-MM-dd')")
properties = {"user": db_user_name,
              "password" : password,
              "driver": driver}
df = spark.read.jdbc(url=url, table=dbtable, predicates=predicates, properties=properties)

最后rdd的分区数量就等于predicates.length。

有一点要注意的是,驱动是放在properties里,网上一般都是连接MySQL数据库,不像oracle数据库一样需要额外的驱动。

还有数据中STARTDATE是date类型的数据,所以需要利用to_date()做数据类型转换。

参考链接

写入

// For implicit conversions like converting RDDs to DataFrames
import spark.implicits._
 
val dataList: List[(Double, String, Double, Double, String
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值