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之有容乃大的list(2)
Sep 15 Python
python网络编程之读取网站根目录实例
Sep 30 Python
python实现telnet客户端的方法
Apr 15 Python
python发送HTTP请求的方法小结
Jul 08 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
Python实现的科学计算器功能示例
Aug 04 Python
用Python登录好友QQ空间点赞的示例代码
Nov 04 Python
使用Python更换外网IP的方法
Jul 09 Python
python爬虫超时的处理的实例
Dec 19 Python
python的turtle库使用详解
May 10 Python
python字符串的拼接方法总结
Nov 18 Python
详解Python中import机制
Sep 11 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
咖啡的种类和口感
2021/03/03 新手入门
URL Rewrite的设置方法
2007/01/02 PHP
phpMyAdmin2.11.6安装配置方法
2008/08/24 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
js验证表单第二部分
2006/11/25 Javascript
JQuery实现自定义对话框的代码
2008/06/15 Javascript
document.compatMode介绍
2009/05/21 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
详解vue修改elementUI的分页组件视图没更新问题
2020/11/13 Javascript
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
使用Python的Django框架结合jQuery实现AJAX购物车页面
2016/04/11 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
Python定义函数时参数有默认值问题解决
2019/12/19 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
党的群众路线教育实践活动领导班子整改措施
2014/10/28 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
五年级作文之想象作文
2019/10/30 职场文书
Mysql数据库命令大全
2021/05/26 MySQL