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的Flask框架中实现分页功能的教程
Apr 20 Python
python web基础之加载静态文件实例
Mar 20 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
Sanic框架基于类的视图用法示例
Jul 18 Python
pytorch打印网络结构的实例
Aug 19 Python
Python argparse模块应用实例解析
Nov 15 Python
python可视化text()函数使用详解
Feb 11 Python
Python批量处理csv并保存过程解析
May 16 Python
Python如何使用PIL Image制作GIF图片
May 16 Python
Python  word实现读取及导出代码解析
Jul 09 Python
Python脚本调试工具安装过程
Jan 11 Python
Python编程super应用场景及示例解析
Oct 05 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学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
url地址自动加#号问题说明
2010/08/21 Javascript
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
js中设置元素class的三种方法小结
2011/08/28 Javascript
eval的两组性能测试数据
2012/08/17 Javascript
javascript中如何处理引号编码"
2013/08/15 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
JS按回车键实现登录的方法
2014/08/25 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
Javascript中replace()小结
2015/09/30 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
vue中beforeRouteLeave实现页面回退不刷新的示例代码
2019/11/01 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
windows下python模拟鼠标点击和键盘输示例
2014/02/28 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
Tensorflow分类器项目自定义数据读入的实现
2019/02/05 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
CSS实现进度条和订单进度条的示例
2020/11/05 HTML / CSS
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
小学生读书感言
2014/02/12 职场文书
支部书记四风对照材料
2014/08/28 职场文书
国庆节演讲稿范文2014
2014/09/19 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
实名检举信范文
2015/03/02 职场文书
详细了解MVC+proxy
2021/07/09 Java/Android