pyspark对Mysql数据库进行读写的实现


Posted in Python onDecember 30, 2020

pyspark是Spark对Python的api接口,可以在Python环境中通过调用pyspark模块来操作spark,完成大数据框架下的数据分析与挖掘。其中,数据的读写是基础操作,pyspark的子模块pyspark.sql 可以完成大部分类型的数据读写。文本介绍在pyspark中读写Mysql数据库。

1 软件版本

在Python中使用Spark,需要安装配置Spark,这里跳过配置的过程,给出运行环境和相关程序版本信息。

  • win10 64bit
  • java 13.0.1
  • spark 3.0
  • python 3.8
  • pyspark 3.0
  • pycharm 2019.3.4

2 环境配置

pyspark连接Mysql是通过java实现的,所以需要下载连接Mysql的jar包。

下载地址

pyspark对Mysql数据库进行读写的实现

选择下载Connector/J,然后选择操作系统为Platform Independent,下载压缩包到本地。

pyspark对Mysql数据库进行读写的实现

然后解压文件,将其中的jar包mysql-connector-java-8.0.19.jar放入spark的安装目录下,例如D:\spark\spark-3.0.0-preview2-bin-hadoop2.7\jars

pyspark对Mysql数据库进行读写的实现

环境配置完成!

3 读取Mysql

脚本如下:

from pyspark.sql import SQLContext, SparkSession

if __name__ == '__main__':
  # spark 初始化
  spark = SparkSession. \
    Builder(). \
    appName('sql'). \
    master('local'). \
    getOrCreate()
  # mysql 配置(需要修改)
  prop = {'user': 'xxx', 
      'password': 'xxx', 
      'driver': 'com.mysql.cj.jdbc.Driver'}
  # database 地址(需要修改)
  url = 'jdbc:mysql://host:port/database'
  # 读取表
  data = spark.read.jdbc(url=url, table='tb_newCity', properties=prop)
  # 打印data数据类型
  print(type(data))
  # 展示数据
  data.show()
  # 关闭spark会话
  spark.stop()
  • 注意点:
  • prop参数需要根据实际情况修改,文中用户名和密码用xxx代替了,driver参数也可以不需要;
  • url参数需要根据实际情况修改,格式为jdbc:mysql://主机:端口/数据库
  • 通过调用方法read.jdbc进行读取,返回的数据类型为spark DataFrame;

运行脚本,输出如下:

pyspark对Mysql数据库进行读写的实现

4 写入Mysql

脚本如下:

import pandas as pd
from pyspark import SparkContext
from pyspark.sql import SQLContext, Row

if __name__ == '__main__':
  # spark 初始化
  sc = SparkContext(master='local', appName='sql')
  spark = SQLContext(sc)
  # mysql 配置(需要修改)
  prop = {'user': 'xxx',
      'password': 'xxx',
      'driver': 'com.mysql.cj.jdbc.Driver'}
  # database 地址(需要修改)
  url = 'jdbc:mysql://host:port/database'

  # 创建spark DataFrame
  # 方式1:list转spark DataFrame
  l = [(1, 12), (2, 22)]
  # 创建并指定列名
  list_df = spark.createDataFrame(l, schema=['id', 'value']) 
  
  # 方式2:rdd转spark DataFrame
  rdd = sc.parallelize(l) # rdd
  col_names = Row('id', 'value') # 列名
  tmp = rdd.map(lambda x: col_names(*x)) # 设置列名
  rdd_df = spark.createDataFrame(tmp) 
  
  # 方式3:pandas dataFrame 转spark DataFrame
  df = pd.DataFrame({'id': [1, 2], 'value': [12, 22]})
  pd_df = spark.createDataFrame(df)

  # 写入数据库
  pd_df.write.jdbc(url=url, table='new', mode='append', properties=prop)
  # 关闭spark会话
  sc.stop()

注意点:

propurl参数同样需要根据实际情况修改;

写入数据库要求的对象类型是spark DataFrame,提供了三种常见数据类型转spark DataFrame的方法;

通过调用write.jdbc方法进行写入,其中的model参数控制写入数据的行为。

model 参数解释
error 默认值,原表存在则报错
ignore 原表存在,不报错且不写入数据
append 新数据在原表行末追加
overwrite 覆盖原表

5 常见报错

Access denied for user …

pyspark对Mysql数据库进行读写的实现

原因:mysql配置参数出错
解决办法:检查user,password拼写,检查账号密码是否正确,用其他工具测试mysql是否能正常连接,做对比检查。

No suitable driver

pyspark对Mysql数据库进行读写的实现

原因:没有配置运行环境
解决办法:下载jar包进行配置,具体过程参考本文的2 环境配置

到此这篇关于pyspark对Mysql数据库进行读写的实现的文章就介绍到这了,更多相关pyspark Mysql读写内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python查找指定具有相同内容文件的方法
Jun 28 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
对python中的xlsxwriter库简单分析
May 04 Python
python使用matplotlib库生成随机漫步图
Aug 27 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
Django REST framework 视图和路由详解
Jul 19 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
解决keras backend 越跑越慢问题
Jun 18 Python
详解python字符串驻留技术
May 21 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
Jun 11 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 Python
python实现无边框进度条的实例代码
Dec 30 #Python
python中的列表和元组区别分析
Dec 30 #Python
python实现xml转json文件的示例代码
Dec 30 #Python
python实现KNN近邻算法
Dec 30 #Python
python 实现逻辑回归
Dec 30 #Python
Python 随机按键模拟2小时
Dec 30 #Python
Python的scikit-image模块实例讲解
Dec 30 #Python
You might like
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
PHP中::、->、self、$this几种操作符的区别介绍
2013/04/24 PHP
php中cookie实现二级域名可访问操作的方法
2014/11/11 PHP
基于jquery的表头固定的若干方法
2011/01/27 Javascript
Firefox中autocomplete="off" 设置不起作用Bug的解决方法
2011/03/25 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
jQuery的slideToggle方法实例
2013/05/07 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
angularjs封装bootstrap时间插件datetimepicker
2016/06/20 Javascript
JS 动态判断PC和手机浏览器实现代码
2016/09/21 Javascript
bootstrapvalidator之API学习教程
2017/06/29 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
JS实现躲避粒子小游戏
2020/06/18 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
JS+CSS实现动态时钟
2021/02/19 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
英国内衣连锁店:Boux Avenue
2018/01/24 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
应用艺术专业个人的自我评价
2014/01/03 职场文书
2014年五一促销活动方案
2014/03/09 职场文书
经典公益广告词
2014/03/13 职场文书
三问三解心得体会
2014/09/05 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
python 实现图片特效处理
2022/04/03 Python