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数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 Python
Python利用Beautiful Soup模块创建对象详解
Mar 27 Python
用matplotlib画等高线图详解
Dec 14 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
Python2和Python3之间的str处理方式导致乱码的讲解
Jan 03 Python
Python装饰器限制函数运行时间超时则退出执行
Apr 09 Python
Django models.py应用实现过程详解
Jul 29 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
pytorch之inception_v3的实现案例
Jan 06 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
Jul 31 Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 Python
安装pytorch时报sslerror错误的解决方案
May 17 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/02 无线电
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
php常用数组函数实例小结
2016/12/29 PHP
关于php开启错误提示的总结
2019/09/24 PHP
PHP7新增函数
2021/03/09 PHP
jquery的Tooltip插件 qtip使用详细说明
2010/09/08 Javascript
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
原生js实现查询天气小应用
2016/12/09 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
详解微信小程序input标签正则初体验
2018/08/18 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
VUE实现密码验证与提示功能
2019/10/18 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
原生js实现无缝轮播图效果
2021/01/28 Javascript
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
python内置数据类型之列表操作
2018/11/12 Python
python pygame实现2048游戏
2018/11/20 Python
Python自动抢红包教程详解
2019/06/11 Python
NumPy统计函数的实现方法
2020/01/21 Python
python用什么编辑器进行项目开发
2020/06/17 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
幼儿园老师辞职信
2014/01/20 职场文书
新书发布会策划方案
2014/06/09 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
纪念9.18事变演讲稿
2014/09/14 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书