1. spark连接mysql需要JDBC驱动,其实就是一个.jar包,下载下来就可以了。但是!!!坑很多!!!整个处理流程如下:
      1. MySQL的JDBC驱动配置过程:
        • 先下载Mysql的在Java中JDBC驱动

    【下载地址https://dev.mysql.com/downloads/file/?id=485758】

    【Linux 下载可以用: wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java_8.0.16-1debian9_all.deb

    1. - 下载的文件是,mysql-connector-java_8.0.16-1debian9_all.deb。对它进行解压。
    2. ar -x mysql-connector-java_8.0.16-1debian9_all.deb】【注意,是ar,不是tar
    3. - 再解压一个文件data.tar.xz
    4. xz -d data.tar.xz
    5. - 再解压一个文件 data.tar
    6. tar -xf data.tar】<br /> 得到一个usr/ 目录
    7. - 看到最终需要的.jar文件【cd usr/share/java

    mysql-connector-java-8.0.16.jar

    b. 建立spark 与MySQL的联系,需要spark-shell启动时添加两个属性
    —jars ~/…/mysql-connector-java-8.0.16.jar
    —driver-class-path ~/…/mysql-connector-java-8.0.16.jar
    c. 注意要点

    1. - spark连接MySQL时,要看MySQL的版本而决定写哪个driver

    MySQL<8.0版本,driver 写com.mysql.jdbc.Driver
    MySQL>8.0版本,driver 写com.mysql.cj.jdbc.Driver

    1. - overwrite append 的区别
    2. overwrite:会删除原表及表结构,重新建立新表<br /> append :在原表后面添加数据,字段可以是原表格字段的子集。【巧用:递增唯一字段。spark生成唯一递增字段很麻烦,可以先在MySQL中建立递增的字段,再从spark中往MySQL写入数据】

    d. 最终写法为【注意代码中的url写法】:

    1. # 写入MySQL
    2. try:
    3. print("using driver : com.mysql.cj.jdbc.Driver")
    4. LOGGER.info("准备写入 MySQL 数据库")
    5. tableName.write.jdbc(
    6. url=
    7. "jdbc:mysql://{0}:{1}/{2}?user={3}&password={4}&useUnicode=true&characterEncoding=UTF-8&useServerPrepStmts=false&rewriteBatchedStatements=true".format(host,port,db_name,user,password),
    8. mode=mode,
    9. table=table_name,
    10. properties={"driver": 'com.mysql.cj.jdbc.Driver'})
    11. LOGGER.info("成功写入 MySQL 数据库")
    12. except:
    13. try:
    14. print("change driver : com.mysql.jdbc.Driver")
    15. tableName.write.jdbc(
    16. url=
    17. "jdbc:mysql://{0}:{1}/{2}?user={3}&password={4}&useUnicode=true&characterEncoding=UTF-8&useServerPrepStmts=false&rewriteBatchedStatements=true".format(host,port,db_name,user,password),
    18. mode=mode,
    19. table=table_name,
    20. properties={"driver": 'com.mysql.jdbc.Driver'})
    21. LOGGER.info("成功写入 MySQL 数据库")
    22. except Exception as e:
    23. LOGGER.info("写入Mysql出错,请检查配置文件。默认开启了写入MySQL")
    1. mysql字符集问题

    写入会乱码,那么就查询一下mysql的编码,然后在url上加入两个参数useUnicode=true&characterEncoding=utf-8,以utf-8为例:

    1. # 修改上述代码中的url为
    2. url= "jdbc:mysql://{0}:{1}/{2}?user={3}&password={4}&useUnicode=true&characterEncoding=utf-8".format(host,port,db_name,user,password)
    1. spark使用JDBC写入mysql时很慢【写入大量数据时会发生】

    解决方案是在url上加入这两个参数:useServerPrepStmts=false&rewriteBatchedStatements=true

    1. # 修改上述代码中的url为
    2. url="jdbc:mysql://{0}:{1}/{2}?user={3}&password={4}&useUnicode=true&characterEncoding=utf-8&useServerPrepStmts=false&rewriteBatchedStatements=true".format(host,port,db_name,user,password)